采用MSAL2.0&PKCE的Azure B2C Angular应用如何校验本地存储并获取用户声明
MSAL Angular v2对接Azure AD B2C常见问题答疑
关于Local Storage缓存字段的说明
Local Storage中出现credentialType、clientId、authorityType三类字段属于完全正常的情况,是MSAL 2.0核心缓存机制的固定结构化字段:
credentialType:用于分类标记缓存内的凭据类型(ID Token / Access Token / Refresh Token),是MSAL内部快速检索匹配凭据的核心标识clientId:标记当前缓存对应的Azure AD B2C应用注册ID,避免多应用、多租户场景下的缓存数据混同authorityType:标记当前缓存对应的授权源类型(B2C通用授权、租户专属授权、自定义策略授权等),匹配B2C不同用户流/自定义策略的路由逻辑
以上字段均为非敏感的检索元数据,不涉及用户核心凭据泄露,无需特殊处理,仅需注意不要手动修改或删除即可。
获取登录用户地址等自定义声明的操作方法
首先需要完成B2C侧的前置配置:Azure AD B2C默认的用户基础对象不会自带地址这类自定义属性,必须提前在你使用的用户流/自定义策略中,把「地址」等需要返回的用户属性配置为ID Token允许返回的声明,否则前端无论如何都无法获取到对应字段。
完成B2C侧配置后,前端可通过两个稳定路径读取用户声明:
- 直接读取当前激活账户的内嵌声明
调用msalService.instance.getActiveAccount()获取当前登录的激活账户对象,其下的idTokenClaims属性会包含所有配置允许返回的用户声明,示例代码:// 获取当前登录用户的地址声明 const activeAccount = this.msalService.instance.getActiveAccount(); const userAddress = activeAccount?.idTokenClaims?.['address']; - 主动静默刷新获取最新声明
如果是在策略调整后新增的声明,存量缓存的ID Token不会自动同步新字段,需要通过静默获取Token接口拉取最新的ID Token内容:this.msalService.acquireTokenSilent({ scopes: ['openid', 'profile'] }).subscribe(authResult => { const latestUserAddress = authResult.idTokenClaims?.['address']; })
常见踩坑提示:很多用户配置完声明后读取为空,本质是没有等用户完成一次新的ID Token签发流程——历史缓存的旧Token不会附带新增的声明字段,触发一次静默刷新即可解决。
内容的提问来源于stack exchange,提问作者wonderful world
相关产品推荐
相关产品推荐

