C# Azure AD v2角色未包含在访问令牌中
我正在使用以下范围对azure Ad进行身份验证(授权\代码授予):离线\访问、openid、配置文件、用户。读取 根据文档,我收到的访问令牌应包含用户角色: 但是,只有标识令牌返回角色: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
--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]