Azure AD v2 roles not included in Access Token(访问令牌中不包括Azure AD v2角色)
问题描述
我正在使用https://login.microsoftonline.com/.../oauth2/v2.0/token通过以下作用域对Azure Ad进行身份验证(AUTHORIZATION_CODE授权):Offline_Access,OpenID,Profile,User.Read 根据文档,我收到的访问令牌应该包含用户的角色: https://docs.microsoft.com/en-us/azure/active-directory/develop/access-tokens
但是,只有身份令牌才返回角色:
--Access Token
{
"typ": "JWT",
"nonce": "IWTwK2P0vzHoNnv1vvvSsjZSbAYPpSIk8MozY0A4WR0",
"alg": "RS256",
"x5t": "nOo3ZDrODXEK1jKWhXslHR_KXEg",
"kid": "nOo3ZDrODXEK1jKWhXslHR_KXEg"
}.{
...
"rh": "0.ASgASPp-HouAsUyXCdG05vvfeHAoPPG46TFOoWYsil-LDcsoADw.",
"scp": "User.Read profile openid email",
...
}.[Signature]
--Identity Token
{
"typ": "JWT",
"alg": "RS256",
"kid": "nOo3ZDrODXEK1jKWhXslHR_KXEg"
}.{
...
"rh": "0.ASgASPp-HouAsUyXCdG05vvfeHAoPPG46TFOoWYsil-LDcsoADw.",
"roles": [
"MyApp.Read",
"MyApp.Admin",
"MyApp.Write",
],
...
}.[Signature]
是否有方法使访问令牌也包括角色?
推荐答案
感谢@juunas的提示,@juunas是正确的。如果您使用的是自定义API,则用户令牌还可以包含roles
声明。
您需要在Azure中创建两个应用程序,一个表示客户端应用程序,另一个表示API应用程序,然后使用客户端应用程序调用API应用程序。
首先,您需要公开Azure保护的后端应用程序的API,并添加客户端应用程序:
接下来,您需要设置API应用程序AppRole,这是您的自定义角色,它将显示在清单中。
然后,您可以将该角色分配给用户。转到企业应用程序&>您的API应用程序&>用户和组。接下来,转到客户端应用程序,授予客户端应用程序访问后端API的权限:
- 在"API权限"下,单击"添加权限",然后单击"我的API"选项卡。
- 找到您的后端应用程序并选择适当的作用域。
- 单击"添加权限"。
- 授予您的API管理员权限
接下来,您需要使用auth code flow获取访问令牌,这需要您登录用户并获取授权码,然后使用授权码兑换访问令牌。
分析令牌,它同时包含scp
声明和roles
声明。
这篇关于访问令牌中不包括Azure AD v2角色的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:访问令牌中不包括Azure AD v2角色


- 如何用自己压缩一个 IEnumerable 2022-01-01
- 输入按键事件处理程序 2022-01-01
- Web Api 中的 Swagger .netcore 3.1,使用 swagger UI 设置日期时间格式 2022-01-01
- C#MongoDB使用Builders查找派生对象 2022-09-04
- 在哪里可以找到使用中的C#/XML文档注释的好例子? 2022-01-01
- 带有服务/守护程序应用程序的 Microsoft Graph CSharp SDK 和 OneDrive for Business - 配额方面返回 null 2022-01-01
- 良好实践:如何重用 .csproj 和 .sln 文件来为 CI 创建 2022-01-01
- C# 中多线程网络服务器的模式 2022-01-01
- MoreLinq maxBy vs LINQ max + where 2022-01-01
- WebMatrix WebSecurity PasswordSalt 2022-01-01