Azure AD B2C ::访问令牌中缺少角色声明

时间:2020-07-21 12:04:42

标签: azure oauth azure-ad-b2c

我在Azure AD B2C中有两个注册的应用程序:azure函数应用程序和前端spa应用程序。 我从前端应用程序调用azure函数,并使用隐式授权流程。 我使用MSAL npm包来请求访问令牌。

我关注了这篇文章,为用户设置角色: https://docs.microsoft.com/en-us/azure/active-directory/develop/howto-add-app-roles-in-azure-ad-apps

但是我在前端应用程序中收到的access_token缺少“角色”声明以及id_token。 这是我收到的访问令牌:

{
  "typ": "JWT",
  "alg": "RS256",
  "kid": "X5eXk4xyojNFum1kl2Ytv8dlNP4-c57dO6QGTVBwaNk"
}.{
  "iss": "https://<tenant_name>.b2clogin.com/<id>/v2.0/",
  "exp": 1595333452,
  "nbf": 1595329852,
  "aud": "3d6123b2-b436-46c0-bcde-e0b61b0ad827",
  "oid": "e98c46c4-f13d-428e-9b7d-28ba3abeb060",
  "sub": "e98c46c4-f13d-428e-9b7d-28ba3abeb060",
  "name": "Basic User",
  "emails": [
    "basicuser@gmail.com"
  ],
  "tfp": "B2C_1_signin_v2",
  "nonce": "a70eece3-31d2-4cc3-8abb-0a56a95d4ba1",
  "scp": "demo.read",
  "azp": "d7787de1-6642-409f-b0b9-2f5608476367",
  "ver": "1.0",
  "iat": 1595329852
}.[Signature]

为什么其中没有角色?

2 个答案:

答案 0 :(得分:0)

据我所知,B2C不支持角色声明。过去,我不得不使用自定义声明,而Sven Glöckner has written an article则描述了与我所做的类似的事情。

在我的情况下,我将角色声明值默认添加为“ appMember”,就像网站上用户的主要角色一样,如果他拥有我们公司的UPN扩展名,他将获得一个角色例如“ internalUser”。这就是我们区分适用于安全调整和下游调用的权限的方式。

答案 1 :(得分:0)

Azure AD B2C当前不支持应用程序角色。

您可以为请求Azure feedback portal发出用户声音,也可以为existing one投票。

现在,您可以从AAD B2C自定义策略调用MS Graph,可以使用OAuth客户端凭据在自定义策略中调用API。

您可以查询用户组成员身份,然后将数据直接返回B2C策略,然后将其发布到令牌中

https://docs.microsoft.com/en-us/azure/active-directory-b2c/secure-rest-api#oauth2-bearer-authentication

然后使用它从MS Graph获取数据

https://docs.microsoft.com/en-us/azure/active-directory-b2c/custom-policy-rest-api-claims-exchange

您需要使用这两个组来进行管理,或者在B2C租户内部创建AAD应用并在其中进行应用角色分配。然后,在B2C策略执行期间,调用REST API来查询用户的角色,并将其插入B2C令牌中。您需要为此使用自定义策略。请参阅与此类似的github sample