【问题标题】:Getting Security Groups in JWT Access Token在 JWT 访问令牌中获取安全组
【发布时间】:2019-02-25 14:59:09
【问题描述】:

我希望 JWT access_token 包含安全组列表。通过阅读文档,我尝试在我的应用程序 regostraton 的清单中设置 "groupMembershipClaims": "All",

设置是我有一个包含 2 个用户的 azure 广告域。然后我有 2 个组:[user, admin] 每个用户都有一个分配给它的组。每个组的类型为security

我正在尝试手动执行 OAuth 代码流程,方法是转到类似于以下格式的 url:

https://login.microsoftonline.com/<tenantid>/oauth2/v2.0/authorize?client_id=<application-id>&response_type=code&redirect_uri=http://localhost:8080&response_mode=query&scope=offline_access%20user.read%20mail.read&state=12345

然后我使用我在 azure ad 中设置的用户帐户登录。然后我用postman向https://login.microsoftonline.com/<tenant-id>/oauth2/v2.0/token提交post请求,带参数:

  • client_id = <client-id>
  • code = 上次登录的代码,
  • redirect_uri = http://localhost:8080
  • grant_type = authorization_code
  • scope = user.read mail.read

我得到了一个有效的回复,带有 access_token。但是,当我对其进行解码时,根本没有列出任何组声明。

如何获取令牌中列出的组?

【问题讨论】:

    标签: oauth azure-active-directory


    【解决方案1】:

    根据我的研究,Azure Active Directory 的 Azure AD v2 端点尚不支持其令牌中的组声明。更多详情请参考document。如果要获取一个用户所属的所有组,则需要从 Microsoft Graph API 查询组。您可以在此处找到 API 文档:https://docs.microsoft.com/en-us/graph/api/user-list-memberof?view=graph-rest-1.0

    【讨论】:

    • 或者,您可以在应用程序中定义用户角色并将其分配给组/用户。使 AAD 中通过组授予的访问权限更加透明。
    【解决方案2】:

    如果您使用应用程序访问自己的API,为了在access_token中获取组声明,您需要在API清单中根据需要配置groupMembershipClaims值,然后您可以在访问令牌。

    但是如果访问的资源是MS graph API或者Azure AD graph API,则无法配置,只能使用openid connect获取id_token,然后在id_token中可以看到group claim。在您的流程中,您可以在范围内添加openid,然后您可以在id_token中找到组信息。

    我在邮递员中尝试了oauth2代码流:

    它返回 access_token 和 id_token。为了解析 id_token,我得到了组信息:

    【讨论】:

    • @Klouddy。我已经更新了我的答案,请看一下。也许这会帮助您更清楚地理解group 声明。
    • 为了清楚起见,组只存在于 id 令牌中而不存在于访问令牌中?尽管文档说明这应该可以工作,但我似乎无法让组声明进入访问令牌。
    猜你喜欢
    • 2018-10-16
    • 2015-05-06
    • 2018-01-02
    • 2018-11-12
    • 2018-01-13
    • 2019-12-08
    • 1970-01-01
    • 2018-07-11
    • 2021-10-03
    相关资源
    最近更新 更多