已认证用户进入Change Password Custom Policy无Cookie传递令牌咨询
不需要依赖B2C会话Cookie即可完成身份传递,有两种成熟可落地的实现方式,适配access token存储在sessionStorage的场景:
方案1:使用原生id_token_hint参数传递校验身份
- 重定向到自定义改密策略的授权端点前,直接从浏览器sessionStorage中取出提前存储的有效身份token(默认支持id_token,也可通过策略配置兼容现有存储的access token),将其作为
id_token_hint查询参数拼接到重定向URL中。 - 在自定义改密策略的扩展配置中新增JWT校验逻辑:对传入的
id_token_hint值做签名校验、过期时间校验、租户/应用受众校验,校验通过后直接从token中提取用户唯一标识、租户信息等核心声明填充用户旅程上下文,直接跳过登录环节进入密码修改页面,全程不需要读取浏览器存储的B2C会话Cookie。 - 重定向请求格式参考:
https://<你的B2C实例域名>/<租户ID>/oauth2/v2.0/authorize ?client_id=<注册在B2C的应用客户端ID> &response_type=code &redirect_uri=<改密完成后的业务回跳地址> &scope=openid offline_access &policy=<自定义改密策略的ID> &id_token_hint=<从sessionStorage读取到的有效token值>
- 注意需要在改密策略的信赖方(RP)节点配置元数据
<Item Key="AllowIdTokenHintInAuthRequest">true</Item>,否则策略会默认忽略传入的id_token_hint参数。
方案2:自定义查询参数配合后端校验适配现有access token
- 如果你不想额外改造token签发逻辑、需要直接使用当前存在sessionStorage里的access token,可以在重定向URL中追加自定义查询参数(例如
client_access_token=<从sessionStorage取出的access token值>)。 - 在自定义改密策略的用户旅程第一步,配置请求参数声明解析规则,直接从URL查询参数中读取
client_access_token的值,调用自有业务后端的token校验接口做有效性校验:校验通过后由后端返回对应用户的核心身份声明,填充策略上下文后直接进入改密环节,整个流程同样不依赖任何Cookie传递身份。
注意事项
- 所有重定向请求必须强制走HTTPS,避免token在传输链路中泄露
- 策略端必须做严格的token合法性校验,禁止直接解析token内容不做签名/有效性校验,防止伪造身份绕过登录
- 改密完成后建议主动作废传入的旧token,下发新的身份凭证,降低token泄露带来的安全风险
内容的提问来源于stack exchange,提问作者Adrian Thompson Phillips
相关产品推荐
相关产品推荐

