从身份验证令牌中提取用户

时间:2019-09-11 18:19:26

标签: azure-api-management

我创建了自定义的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”: “承载”, “expires_in”:3600,的 “用户”: “T81lum-5p6QvDR7l6hv7lfE52bAbA2ylWBnv9CZEzNb0B”}“

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

谢谢

3 个答案:

答案 0 :(得分:0)

只需分享一个想法。用户名编码在可以用JWT解析的Bear令牌中。您可以在中添加策略,在其中分析令牌并将用户名保存到标头,然后传递到后端。 official document已经提供了JWT解析器

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

请参见JWT token

答案 1 :(得分: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())"/>

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

答案 2 :(得分:0)

您无法从授权码中检索用户详细信息。您可以使用访问令牌来完成。 请参考类似问答here