访问令牌中不包括Azure AD v2角色 [英] Azure AD v2 roles not included in Access Token

查看:65
本文介绍了访问令牌中不包括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角色的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆