AD B2C ROPC 用户流校验密码重置标记后返回自定义错误的解决方案咨询
AD B2C ROPC 流返回自定义密码重置错误的解决方案
内置的ROPC用户流原生不支持自定义错误返回逻辑,以下是两种可落地的实现方案:
方案一:应用层二次校验(改造成本最低)
- ROPC 流登录成功获取到JWT后,调用Microsoft Graph接口查询对应用户的
resetpassword状态标记 - 若用户携带重置标记,直接丢弃已获取的令牌,业务侧返回自定义错误信息“Reset the password and try again.”
- 若状态正常,将JWT正常返回给前端使用
方案二:自定义IEF策略实现(流程最规范)
该方案完全在AD B2C侧完成校验,不需要应用层额外处理,具体实现步骤如下:
- 扩展用户属性,在AD B2C目录中新增布尔类型的扩展属性
extension_needResetPassword,用于存储用户密码重置标记,确保策略拥有该属性的读写权限 - 下载ROPC对应的自定义策略 starter pack,在用户凭据校验通过的步骤后,新增用户属性读取的技术配置,拉取
extension_needResetPassword的属性值 - 新增断言校验的技术配置,当属性值为
true时直接抛出指定错误,示例策略片段如下:
<TechnicalProfile Id="CheckPasswordResetStatus"> <Metadata> <Item Key="RaiseErrorIfClaimsConditionIsTrue">true</Item> <Item Key="UserMessageIfClaimsConditionIsTrue">Reset the password and try again.</Item> <Item Key="ClaimsCondition">extension_needResetPassword == True</Item> </Metadata> <IncludeTechnicalProfile ReferenceId="AAD-UserReadUsingSignInName" /> </TechnicalProfile>
- 调整ROPC用户旅程的执行顺序,将校验步骤放在令牌签发节点之前,校验不通过直接终止流程返回错误,校验通过则正常签发JWT
注意事项
- 自定义策略返回的错误会遵循OAuth 2.0规范,
error字段为invalid_grant,自定义错误内容会放在error_description字段中返回 - 自定义策略需要完成测试后再上线,避免影响现有登录流程
内容的提问来源于stack exchange,提问作者Saravana Kumar
相关产品推荐
相关产品推荐

