我在这上面花了很多时间,也不知道我做错了什么,但是我读了很多关于如何返回on-premise sids的文章,但是就是不能让它工作。
这些是我读过的一些文章(不是全部!):
Tutorial: Sign in users and call the Microsoft Graph API from a JavaScript single-page app (SPA) using auth code flow
Getting Authentication Access Tokens for Microsoft APIs
在SPA + Web API中通过MSAL检查Azure Active Directory组成员身份
我已经在Azure AD中创建了我的应用注册,我知道它正在按预期工作,因为返回的令牌包含:
{
...
"app_displayname": "My app",
"appid": "1234",
"family_name": "Joe",
"given_name": "Soap",
"idtyp": "user",
"ipaddr": "123.456.789.101",
"name": "Joe Soap",
...
}
所有的信息都是正确的,但它只是不包含任何“团体”的索赔中所述的一些文章。我已经检查了Azure AD,我是28个组的一部分。有些是'Microsoft 365',有些是'Security Group',有些是邮件相关/分发组,所以绝对不会超过500,我读过它将返回什么,我应该使用另一种方法。
在清单部分,这是我所拥有的:
...
"groupMembershipClaims": "SecurityGroup",
...
"optionalClaims": {
"idToken": [
{
"name": "groups",
"source": null,
"essential": false,
"additionalProperties": [
"on_premise_security_identifier"
]
}
],
"accessToken": [
{
"name": "groups",
"source": null,
"essential": false,
"additionalProperties": [
"on_premise_security_identifier"
]
}
],
"saml2Token": [
{
"name": "groups",
"source": null,
"essential": false,
"additionalProperties": [
"on_premise_security_identifier"
]
}
]
},
在范围方面,我添加了以下内容:
'profile'
'User.Read'
'openid'
我也试过添加组。readall
但无济于事。仍然没有返回组声明或任何其他看起来像SID列表的条目。
有人知道我哪里做错了吗?如果我遗漏了什么,道歉,只是问了,我会更新我的答案。
最后一点。当我完全清除我的缓存时,我会提示Microsoft登录,但不知何故,当我尝试使用我的企业(Office 365)帐户时,它不会让我登录,但如果我使用我的个人帐户,它会,但应用程序注册使用包括TenantId,ClientID,范围等。都来自我的Azure企业帐户。
谢谢.
1条答案
按热度按时间zbsbpyhn1#
注意:若要在访问令牌中获取组声明,您必须为您的应用或API(而非Microsoft Graph API)生成访问令牌。参考此MsDoc
我的Azure AD应用程序清单如下所示:
我公开了一个API并添加了一个作用域:
已授予管理员对范围的同意:
通过使用以下参数将scope传递为**
api://ClientID/group.read
**生成访问令牌:当我解码访问令牌时,组声明显示成功:
我通过传递与您相同的作用域生成访问令牌:
当我解码访问令牌时,* 组声明未显示,因为访问令牌是为Microsoft Graph* 的其他资源生成的。