如何通过MSAL-React程序化触发Azure AD B2C重置密码流程?
Azure AD B2C/MSAL 密码重置流程实现方案
一、解决AADB2C90037错误,直接触发B2C原生重置流程
你遇到的AADB2C90037错误,是因为调用loginRedirect时参数传错了——重置密码不是所谓的“权限”,而是要指定B2C的重置密码用户流/自定义策略ID,同时配置正确的请求参数:
- 点击重置按钮时,调用
loginRedirect并传入重置密码流的授权地址,同时设置prompt: 'login'避免静默逻辑干扰,示例代码如下:
const resetPasswordRequest = { authority: "https://你的B2C租户域名.b2clogin.com/你的B2C租户ID.onmicrosoft.com/B2C_1_你的重置密码流ID", // 替换成自己的实际信息 prompt: "login" }; msalInstance.loginRedirect(resetPasswordRequest);
这样就能直接跳转到B2C官方的重置密码页面,不会再触发错误。
二、自定义内部重置页面+邮件链接的实现思路
如果想搭建自己的重置页面,再通过邮件发送链接触发流程,分两步走:
1. 生成带重置令牌的邮件链接
- 在你的后端服务里,调用Azure AD B2C的密码重置令牌生成接口(可以通过Microsoft Graph,或者在B2C自定义策略里集成REST API),生成一个一次性的有效令牌。
- 把令牌拼接成你的内部重置页面链接,比如:
https://你的网站域名/reset-password?token=xxx&user=xxx,然后发送到用户邮箱。
2. 内部页面完成密码重置
- 用户点击邮件链接进入你的自定义页面后,收集用户输入的新密码。
- 调用Azure AD B2C的密码重置接口(或自定义策略里的REST端点),传入令牌和新密码完成重置操作。
- 重置成功后,引导用户回到登录页,或者直接调用MSAL的
loginRedirect完成登录。
三、关键注意点
- 不管用哪种方式,必须先在B2C租户里创建好密码重置用户流(或对应的自定义策略),并且确保该流的回调地址已经添加到MSAL的配置里。
- 自定义邮件链接时,要保证令牌的时效性(设置合理过期时间),并且传输过程要加密,避免泄露被恶意利用。
内容的提问来源于stack exchange,提问作者Denis S Dujota
相关产品推荐
相关产品推荐

