我正在使用 https://login.microsoftonline.com/.../oauth2/v2.0/token 使用范围对 azure Ad 进行身份验证(授权代码授予):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]
有没有办法让访问令牌也包含角色?
答案 0 :(得分:0)
感谢@juunas 的提示,@juunas 是对的。如果您使用的是自定义 API,则用户令牌还可以包含 roles
声明。
需要在Azure中创建两个应用,一个代表客户端应用,另一个代表api应用,然后使用客户端应用调用api应用.
首先需要暴露Azure保护的后端应用的API并添加客户端应用:
接下来需要设置api application AppRole,这是你自定义的角色,它会显示在manifest中。
然后您可以将角色分配给用户。转到企业应用程序>您的 api 应用程序>用户和组。
接下来,转到客户端应用程序,让您的客户端应用程序访问您的后端 api:
接下来需要使用auth code flow获取访问令牌,需要先登录用户获取授权码,然后使用授权码兑换访问令牌。
>解析令牌,它包含 scp
声明和 roles
声明。