C# Azure AD v2角色未包含在访问令牌中

C# Azure AD v2角色未包含在访问令牌中,c#,asp.net-core,active-directory,azure-active-directory,azure-ad-graph-api,C#,Asp.net Core,Active Directory,Azure Active Directory,Azure Ad Graph Api,我正在使用以下范围对azure Ad进行身份验证(授权\代码授予):离线\访问、openid、配置文件、用户。读取 根据文档,我收到的访问令牌应包含用户角色: 但是,只有标识令牌返回角色: --Access Token { "typ": "JWT", "nonce": "IWTwK2P0vzHoNnv1vvvSsjZSbAYPpSIk8MozY0A4WR0", "alg": &quo

我正在使用以下范围对azure Ad进行身份验证(授权\代码授予):离线\访问、openid、配置文件、用户。读取

根据文档,我收到的访问令牌应包含用户角色:

但是,只有标识令牌返回角色:

--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]


有没有办法让访问令牌也包含角色?

感谢@juunas的提示,@juunas是正确的。如果您使用的是自定义api,则用户令牌还可以包含
角色
声明

您需要在Azure中创建两个应用程序,一个代表客户端应用程序,另一个代表api应用程序,然后使用客户端应用程序调用api应用程序

首先,您需要公开受Azure保护的后端应用程序的API,并添加客户端应用程序:

接下来,您需要设置api应用程序AppRole,这是您的自定义角色,它将显示在清单中

然后您可以将角色分配给用户。转到企业应用程序>api应用程序>用户和组

接下来,转到客户端应用程序,为客户端应用程序提供对后端api的访问权限:

  • 在“API权限”下,单击“添加权限”,然后单击“我的API”选项卡
  • 找到后端应用程序并选择适当的作用域
  • 单击“添加权限”
  • 为您的API授予管理员许可
接下来,您需要使用获取访问令牌,这要求您登录到用户并获取授权码,然后使用授权码兑换访问令牌

解析令牌,它包含
scp
声明和
角色
声明


Thanx Carl。您可能有一些文档,或者这是在哪里声明的?@Murdock用户令牌仅包含
scp
声明,并且只有应用令牌具有
角色
声明@默多克我以前也回答过类似的问题,你可以参考:这是不正确的。它们不在令牌中,因为它是MS Graph API令牌。如果在应用程序上为用户分配了角色,则用户令牌还可以包含角色声明。为了得到他们,OP需要为他们的API获取一个令牌,而不是MS Graph。奇怪的是,新的答案只有在用户明确添加到角色而不是通过组时才有效。我们只是用了身份证。嗨,卡尔。我会在今天结束前投票并接受。我只是给别人时间来回应。好吧,祝你愉快:)嗨,这对你有帮助吗?
--Identity Token
{
  "typ": "JWT",
  "alg": "RS256",
  "kid": "nOo3ZDrODXEK1jKWhXslHR_KXEg"
}.{
...
  "rh": "0.ASgASPp-HouAsUyXCdG05vvfeHAoPPG46TFOoWYsil-LDcsoADw.",
  "roles": [
    "MyApp.Read",
    "MyApp.Admin",
    "MyApp.Write",
  ],
...
}.[Signature]