访问令牌中不包括Azure AD v2角色

Azure AD v2 roles not included in Access Token(访问令牌中不包括Azure AD v2角色)
本文介绍了访问令牌中不包括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角色的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

DispatcherQueue null when trying to update Ui property in ViewModel(尝试更新ViewModel中的Ui属性时DispatcherQueue为空)
Drawing over all windows on multiple monitors(在多个监视器上绘制所有窗口)
Programmatically show the desktop(以编程方式显示桌面)
c# Generic Setlt;Tgt; implementation to access objects by type(按类型访问对象的C#泛型集实现)
InvalidOperationException When using Context Injection in ASP.Net Core(在ASP.NET核心中使用上下文注入时发生InvalidOperationException)
LINQ many-to-many relationship, how to write a correct WHERE clause?(LINQ多对多关系,如何写一个正确的WHERE子句?)