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

Azure AD B2C :: Roles claim is missing in access token

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

为什么里面没有角色?

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

在我的例子中,我将角色声明值添加到默认值 'appMember',这就像网站上用户的主要角色,如果他有我们公司的 UPN 扩展,他会得到像 'internalUser' 这样的角色。这就是我们区分适用于安全修整和下游调用的权限的方式。

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

您可以为您的请求提高用户声音Azure feedback portal or vote for an existing one

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

可以查询用户组成员关系,然后return数据直接返回B2C策略,下发到token中

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 类似于此