无法使用我的Azure令牌返回内部部署SID

sqxo8psd  于 2023-10-22  发布在  其他
关注(0)|答案(1)|浏览(74)

我在这上面花了很多时间,也不知道我做错了什么,但是我读了很多关于如何返回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企业帐户。
谢谢.

zbsbpyhn

zbsbpyhn1#

注意:若要在访问令牌中获取组声明,您必须为您的应用或API(而非Microsoft Graph API)生成访问令牌。参考此MsDoc

我的Azure AD应用程序清单如下所示:

  • 通过执行以下操作,onprem SID将显示在您的案例中。*

我公开了一个API并添加了一个作用域:

已授予管理员对范围的同意:

通过使用以下参数将scope传递为**api://ClientID/group.read**生成访问令牌:

https://login.microsoftonline.com/TenantID/oauth2/v2.0/token

client_id:ClientID
scope:api://ClientID/group.read
code:code
redirect_uri:https://jwt.ms
grant_type:authorization_code
client_secret:ClientSecret

当我解码访问令牌时,组声明显示成功

我通过传递与您相同的作用域生成访问令牌:

scope: profile user.read openid

当我解码访问令牌时,* 组声明未显示,因为访问令牌是为Microsoft Graph* 的其他资源生成的。

相关问题