我在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]
为什么其中没有角色?
答案 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策略,然后将其发布到令牌中
然后使用它从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