Azure AD B2C单页应用集成:令牌中添加角色用于API权限控制
解决Azure AD B2C SPA集成中令牌包含角色信息的问题
我之前刚好踩过这个坑,给你分享几个可行的变通方案——毕竟Azure AD B2C目前确实不支持直接在令牌中嵌入用户组或角色信息,官方也是推荐用自定义扩展的方式来实现:
方案一:通过自定义策略的OnTokenIssuance注入角色声明
这是最推荐的方式,能直接把角色信息放到令牌里,让API可以直接用AuthorizeRoles和IsInRole:
- 第一步:先在Azure AD B2C里给用户配置角色——你可以用内置的应用角色,或者创建自定义用户属性来存储角色信息,给对应的用户分配好角色
- 第二步:编写B2C自定义策略,在令牌颁发的
OnTokenIssuance步骤中,调用Graph API获取当前用户的角色数据,然后把这些数据作为自定义声明添加到ID令牌或访问令牌中 - 第三步:在你的SPA中,确保授权请求的范围包含访问Graph API所需的权限,拿到令牌后就能在
id_token或access_token里看到角色声明了,API端直接读取这些声明就行
方案二:API端主动查询角色信息
如果不想折腾自定义策略,也可以在API层做处理:
- 当API收到SPA传来的令牌后,先验证令牌的有效性,然后调用Graph API查询该用户的角色/组信息
- 在API的授权逻辑里,比如自定义
AuthorizeAttribute,把查询到的角色和接口要求的角色做对比,实现IsInRole的校验 - 注意:这个方案会增加API的响应延迟,因为每次请求都要额外调用Graph API,适合流量不大的场景
额外提示
对于SPA来说,一定要用**授权码流(PKCE)**来获取令牌,这是Azure AD B2C推荐的SPA认证方式,能确保令牌的安全性。另外,要确认自定义策略里的声明映射是正确的,别把角色声明放到了API无法读取的位置。
内容的提问来源于stack exchange,提问作者peter pan
相关产品推荐
相关产品推荐

