本文介绍了访问令牌中不包括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角色的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!