You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure B2C自定义策略重置密码后登录报AADB2C90088错误如何解决

Azure B2C 自定义策略密码重置后登录报错解决方案

错误详情

HTTP/1.1 400 Bad Request
Cache-Control: private
Allow: OPTIONS,TRACE,GET,HEAD,POST
Content-Type: application/json; charset=utf-8
x-ms-gateway-requestid: a6264e6b-e73e-45e1-aab9-71c5916e1215
Access-Control-Expose-Headers: Content-Length, Content-Encoding
Access-Control-Allow-Credentials: true
Access-Control-Allow-Methods: POST, OPTIONS
Set-Cookie: x-ms-cpim-trans=; domain=****; expires=Fri, 02-Sep-2011 12:14:12 GMT; path=/; SameSite=None; secure; HttpOnly
X-Frame-Options: DENY
Public: OPTIONS,TRACE,GET,HEAD,POST
Strict-Transport-Security: max-age=31536000; includeSubDomains
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Date: Thu, 02 Sep 2021 12:14:12 GMT
Content-Length: 296

{"error":"invalid_grant","error_description":"AADB2C90088: The provided grant has not been issued for this endpoint. Actual Value : B2C_1A_MFA_phone_or_email and Expected Value : B2C_1A_PasswordReset\r\nCorrelation ID: ******\r\nTimestamp: 2021-09-02 12:14:12Z\r\n"}

错误核心原因

AADB2C90088错误本质是授权授予所属策略与令牌请求端点的策略不匹配:当前请求携带的授权码是B2C_1A_MFA_phone_or_email策略颁发的,但被发送到了B2C_1A_PasswordReset策略的令牌端点,因此触发校验失败。
出现两次令牌请求的原因是密码重置流程完成后,自动登录逻辑错误复用了MFA步骤遗留的授权上下文,导致额外发起了一次策略不匹配的令牌请求。

具体解决步骤

  • 步骤1:修正密码重置用户旅程的会话配置
    打开B2C_1A_PasswordReset自定义策略的用户旅程定义,在最后一个编排步骤中,绑定密码重置策略自身的会话管理技术配置文件,禁止继承MFA子旅程的会话上下文:
    <OrchestrationStep Order="N" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="JwtIssuer">
      <UseTechnicalProfileForSessionManagement ReferenceId="SM-AAD" />
    </OrchestrationStep>
    
  • 步骤2:配置密码重置流程直接颁发令牌
    在B2C_1A_PasswordReset策略的RelyingParty节点中,完善令牌输出配置,确保密码重置全流程走完后直接返回身份令牌,不需要额外跳转登录端点发起授权请求:
    <RelyingParty>
      <DefaultUserJourney ReferenceId="PasswordReset" />
      <TechnicalProfile Id="PolicyProfile">
        <DisplayName>PolicyProfile</DisplayName>
        <Protocol Name="OpenIdConnect" />
        <OutputClaims>
          <OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="sub"/>
          <OutputClaim ClaimTypeReferenceId="tenantId" AlwaysUseDefaultValue="true" DefaultValue="{Policy:TenantObjectId}" />
          <!-- 补充其他你需要返回的业务声明 -->
        </OutputClaims>
        <SubjectNamingInfo ClaimType="sub" />
      </TechnicalProfile>
    </RelyingParty>
    
  • 步骤3:修正前端授权上下文逻辑
    如果你使用MSAL类库发起授权请求,需要在密码重置流程触发时重置MSAL的实例上下文,避免复用之前MFA登录时存储的policy参数,确保密码重置流程的所有请求携带的policy参数始终为B2C_1A_PasswordReset。
  • 步骤4:清理跨策略遗留会话
    在密码重置用户旅程的倒数第二个编排步骤中,添加清理旧策略会话的技术配置文件,清除B2C_1A_MFA_phone_or_email策略遗留的会话Cookie:
    <TechnicalProfile Id="ClearMFASession">
      <DisplayName>Clear MFA Policy Session</DisplayName>
      <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.SelfAssertedAttributeProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
      <Metadata>
        <Item Key="SessionManagementTechnicalProfileReferenceId">SM-MFA</Item>
        <Item Key="ClearSession">true</Item>
      </Metadata>
    </TechnicalProfile>
    

验证方式

完成配置后重新走一遍密码重置全流程,观察网络请求中仅存在一次令牌请求且返回200状态码,用户无需重新输入凭证即可直接进入系统。

内容的提问来源于stack exchange,提问作者Pankaj Agrawal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 07:51:00