3

我根据文章创建了自定义 Oauth2 服务并配置 API 以使用它:https ://docs.microsoft.com/en-us/azure/api-management/api-management-howto-oauth2

使用 Developer Portal,我看到访问令牌已发送到 API 端点。但是,我需要再向我的端点发送一条信息。访问令牌如下所示:

{"access_token":"e_Pt_0mEUKfMk7DzN7QDmb4tx6syaMM9d7Ei9UH4y1pYipErNHZFz9dU5ZmdTIvr2R4fD1GxJZY-Bsyt7tIpm7uKFScrrKRAKBVGeU3T7R1WTiBV3WglPK1OHZgOSpIY","token_type":"bearer","expires_in":3600, "user":"T81lum-5p6QvDR7l6hv7lfE52bAbA2ylWBnv9CZEzNb0B" }"

我需要提取令牌的用户属性并将其发送到 API 端点。可能吗?

谢谢

4

3 回答 3

0

您无法从身份验证代码中检索用户详细信息。您可以使用访问令牌来执行此操作。请在此处参考类似的问题和答案

于 2021-04-23T05:38:53.987 回答
0

只是分享一个想法。用户名编码在可以用 JWT 解析的熊令牌中。您可以在 <inbound> 中添加策略,在其中解析令牌并将用户名保存到标头,然后传递到您的后端。官方文档已经提供了JWT解析器

Jwt jwt = AsJwt(put_your_token_in_here)
String userName = jwt.Claims.GetValueOrDefault("name")

请参阅JWT 令牌

于 2019-09-19T10:26:30.960 回答
0

您可以解析 JSON 并提取用户 ID,但这将取决于您使用的语言。

在 Node.JS 中,它非常简单(这里假设 auth blob 是一个字符串,并且尚未解析):

let userid = JSON.parse( auth_blob ).user;

在 Java 中使用 GSON:

JsonElement jsonTree = parser.parse( auth_blob );
JsonElement userElement = jsonTree.get("user");
String user = userElement.getAsString();

等等...搜索“解析 JSON”,您选择的语言将帮助您。

这里有一个关于如何在 Azure 中嵌入 json 提取的简短教程:

https://docs.microsoft.com/bs-latn-ba/azure/api-management/policies/cache-response?toc=api-management/toc.json

<!-- Extract a JSON object containing lat/long from the response and serialize it into a variable. -->
<set-variable name="latlong" value="@(((IResponse)context.Variables["response="""]).Body.As<JObject>
    ()["results"][0]["geometry"]["location"].ToString())"/>

所以,我想你可以为你的 auth blob 做同样的事情:

<set-variable name="user" value="@((auth_blob).Body.As<JObject>
    ()["user"].ToString())"/>

如果这不正确,请编辑 - 我只是在这里猜测。

于 2019-09-20T18:55:12.403 回答