Flutter应用接入Azure B2C后实现密码修改与重置功能的问题咨询
Azure B2C Flutter应用密码修改与重置实现方案
一、处理登录页「忘记密码?」跳转关联密码重置用户流
Azure B2C 登录页用户点击「忘记密码?」选项时,会返回固定错误码AADB2C90118,你只需要捕获该错误并触发预先配置的密码重置用户流即可:
- 给现有登录请求增加
try-catch捕获异常 - 匹配异常错误码为
AADB2C90118后,发起密码重置用户流的授权请求
代码示例:
try { result = await appauth.authorizeAndExchangeCode( AuthorizationTokenRequest( AppConfig.instance.values.clientId, AppConfig.instance.values.redirectUrl, serviceConfiguration: AuthorizationServiceConfiguration( AppConfig.instance.values.loginAuthorizationEndpoint, // 原有登录用户流的授权终结点 AppConfig.instance.values.tokenEndpoint ), scopes: AppConfig.instance.values.scopes ), ); } catch (e) { if (e is AuthorizationException && e.error.contains('AADB2C90118')) { // 触发密码重置流程 final resetResult = await appauth.authorizeAndExchangeCode( AuthorizationTokenRequest( AppConfig.instance.values.clientId, AppConfig.instance.values.redirectUrl, serviceConfiguration: AuthorizationServiceConfiguration( AppConfig.instance.values.resetPwdAuthorizationEndpoint, // 你提前配置好的密码重置用户流授权终结点 AppConfig.instance.values.tokenEndpoint ), scopes: AppConfig.instance.values.scopes, promptValues: ['login'] ), ); // 重置成功后执行自定义逻辑,比如跳转登录页、自动登录 } }
二、个人资料页触发修改密码流程
点击「修改密码」按钮直接发起修改密码用户流的授权请求即可,建议携带当前用户的id_token免二次登录:
- 首先在Azure B2C后台创建密码修改用户流,记录对应的授权终结点存入AppConfig
- 登录成功后存储当前用户的
id_token,修改密码时作为身份凭证传递
代码示例:
// 个人页修改密码按钮点击触发 Future<void> triggerChangePassword() async { // 读取本地存储的当前用户id_token final currentUserIdToken = await getLocalStoredIdToken(); final changePwdResult = await appauth.authorizeAndExchangeCode( AuthorizationTokenRequest( AppConfig.instance.values.clientId, AppConfig.instance.values.redirectUrl, serviceConfiguration: AuthorizationServiceConfiguration( AppConfig.instance.values.changePwdAuthorizationEndpoint, // 修改密码用户流的授权终结点 AppConfig.instance.values.tokenEndpoint ), scopes: AppConfig.instance.values.scopes, additionalParameters: { 'id_token_hint': currentUserIdToken, // 传递身份凭证免二次登录 'prompt': 'login' } ), ); // 修改成功后替换本地存储的token,完成后续逻辑 }
注意事项
- 所有用户流的重定向URL必须和Azure B2C后台配置完全一致,包括大小写、末尾斜杠
- 密码重置、修改密码完成后返回的新token需要替换本地旧token,保证后续接口调用正常
- 如果使用自定义策略而非预置用户流,触发逻辑完全一致,仅需替换对应流程的授权终结点即可
内容的提问来源于stack exchange,提问作者Pilouni
相关产品推荐
相关产品推荐

