Azure OAuth2 代码流 - 没有组在访问令牌中声明(也没有 "hasgroups")

Azure OAuth2 Code Flow - no groups claim in access token (and no "hasgroups" either)

我正在使用 OAuth2 代码流并尝试将用户组恢复到我的访问令牌中。我正在阅读的所有内容都说我应该看到 groups 声明或 hasgroups 声明,但我都没有看到。

我已经为我的客户端应用更改了应用注册清单中的以下字段:

"groupMembershipClaims": "SecurityGroup",
"optionalClaims": {
        "idToken": [],
        "accessToken": [
            {
                "name": "groups",
                "source": null,
                "essential": false,
                "additionalProperties": [
                    "dns_domain_and_sam_account_name"
                ]
            }
        ],
        "saml2Token": []
    },

这是我的登录重定向查询字符串示例 url (login.microsoftonline.com)...

client_id=<clientId>
&response_type=code
&redirect_uri=<redirectUri>
&response_mode=query
&scope=<appScope>%20offline_access
&state=67890

这是我使用 authCode (login.microsoftonline.com/{tenantId}/oauth2/v2.0/token)

请求令牌的查询字符串示例
client_id=<clientId>
&scope=<uriEncodedScopes>%20offline_access
&redirect_uri=<uriEncodedRedirectUri>
&code=<authCode>
&client_secret=<uriEncodedClientSecret>
&grant_type=authorization_code

一切正常,但我不知道如何在我的令牌中取回群组信息。

更新

我在两个 url 中都将 %20openid 添加到我的范围,现在我得到一个 id_token,但我仍然没有看到 "groups" 或 "hasgroups" 在任一标记中。

更新

我刚刚将相同的清单更改(groupMembership、optionalClaims)添加到我的 API 应用程序注册(而不是我的客户端)- 公开范围的 API,我没有看到任何变化.访问令牌和 ID 令牌根本没有对组的任何引用。

根据我的测试,它应该可以工作。而你只需要在你的API应用程序注册中配置groupMembershipClaimsoptionalClaims,参考下面的reason

你可以参考我下面的测试示例,我用工作帐户或个人帐户尝试过,都可以。

请求授权码(api://3e013fde-xxxxxxa422f3/User.Test是我的API权限):

https://login.microsoftonline.com/<tenant-id>/oauth2/v2.0/authorize?
client_id=xxxxxxxxxxxxxxx
&response_type=code
&redirect_uri=https://localhost
&response_mode=query
&scope=openid offline_access api://3e013fde-xxxxxxa422f3/User.Test
&state=12345

请求令牌:

解码 https://jwt.io/ 中的令牌,包含 groups 声明。


注:

我的客户端应用和API应用都是今天创建的,我想在old App Registration(it is not existing in the portal currently)app registration portal(it has been moved to the new App Registrations)new App Registration(the中创建的应用可能会有一些差异应用注册in portal currently)

从这个 doc:

在我的测试中还有一个奇怪的事情,当我创建一个新的API App Registration时,只设置"groupMembershipClaims": "SecurityGroup"而不设置optionalClaims,清单将如下所示。

"groupMembershipClaims": "SecurityGroup",
"optionalClaims": {
        "idToken": [],
        "accessToken": [],
        "saml2Token": []
    }

Access token不包含groupsID tokengroups

如果我用你的设置,Access token 就会有 groups

"groupMembershipClaims": "SecurityGroup",
"optionalClaims": {
        "idToken": [],
        "accessToken": [
            {
                "name": "groups",
                "source": null,
                "essential": false,
                "additionalProperties": [
                    "dns_domain_and_sam_account_name"
                ]
            }
        ],
        "saml2Token": []
    }

但是当我将它 return 设置为

"groupMembershipClaims": "SecurityGroup",
"optionalClaims": {
        "idToken": [],
        "accessToken": [],
        "saml2Token": []
    }

Access token还有groups

来自门户 - Token configuration (preview) 和此文档 - Configure group claims for applications with Azure Active Directory (Public Preview),该功能应该处于预览状态,它可能是一个错误(我不确定)。

所以综上所述,我推荐大家使用两款新的App试试看。