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

Azure AD B2C多用户类型标准用户流配置及AADB2C90088错误求助

解决方案:基于Microsoft.Identity.Web.UI实现多用户类型独立入口配置

一、核心思路

咱们要避免自定义策略,就用标准用户流给每类用户单独配一套注册/登录、编辑资料流,密码重置流共用一套。关键是动态指定策略ID,别去改全局默认配置,这样就能绕过系统强制要求原设置的错误。

二、前端入口直接指定策略

不用改控制器,直接给每个用户类型的按钮拼对应的策略参数就行:

  • 用户A注册按钮跳转:/MicrosoftIdentity/Account/SignUp?policy=B2C_1_SignUp_UserTypeA
  • 用户A登录按钮跳转:/MicrosoftIdentity/Account/SignIn?policy=B2C_1_SignIn_UserTypeA
  • 用户A编辑资料按钮跳转:/MicrosoftIdentity/Account/EditProfile?policy=B2C_1_EditProfile_UserTypeA
  • 所有用户的密码重置统一用共用策略:/MicrosoftIdentity/Account/ForgotPassword?policy=B2C_1_PasswordReset

三、后端配置全量策略

在appsettings.json里把所有要用到的策略都写上,保留默认策略做 fallback:

"AzureAdB2C": {
  "Instance": "https://yourtenant.b2clogin.com/",
  "Domain": "yourtenant.onmicrosoft.com",
  "ClientId": "your-client-id",
  "SignedOutCallbackPath": "/signout/B2C_1_SignUpSignIn",
  "SignUpSignInPolicyId": "B2C_1_SignUpSignIn_Default",
  "UserTypeAPolicies": {
    "SignUp": "B2C_1_SignUp_UserTypeA",
    "SignIn": "B2C_1_SignIn_UserTypeA",
    "EditProfile": "B2C_1_EditProfile_UserTypeA"
  },
  "UserTypeBPolicies": {
    "SignUp": "B2C_1_SignUp_UserTypeB",
    "SignIn": "B2C_1_SignIn_UserTypeB",
    "EditProfile": "B2C_1_EditProfile_UserTypeB"
  },
  "PasswordResetPolicyId": "B2C_1_PasswordReset"
}

Startup/Program.cs里正常注册AddMicrosoftIdentityWebUI就行,不用额外改策略配置。

四、解决AADB2C90088错误

这个错基本是策略类型不匹配导致的,检查这几点:

  • 前端传的policy参数对应的策略类型要对:注册按钮必须用注册流,登录用登录/注册组合流,编辑资料用编辑流,别搞混。
  • 每个用户流绑定的API连接器要对应,别在登录流里绑注册用的连接器。
  • 应用注册里给所有用到的策略都配好正确的回复URL。

五、需要自定义逻辑的替代方案

如果要加控制器逻辑(比如根据用户类型做前置校验),别碰全局AzureAdB2C配置,直接在自定义控制器里调用Microsoft.Identity.Web的API生成带指定策略的认证请求:

private readonly AzureAdB2COptions _b2cOptions;
private readonly IAuthenticationPropertiesProvider _propertiesProvider;

public CustomAccountController(IOptions<AzureAdB2COptions> b2cOptions, IAuthenticationPropertiesProvider propertiesProvider)
{
    _b2cOptions = b2cOptions.Value;
    _propertiesProvider = propertiesProvider;
}

public IActionResult SignUpUserTypeA()
{
    var properties = _propertiesProvider.CreateAuthenticationProperties(
        new[] { _b2cOptions.UserTypeAPolicies.SignUp },
        null,
        _b2cOptions.ClientId,
        _b2cOptions.Domain);
    return Challenge(properties, OpenIdConnectDefaults.AuthenticationScheme);
}

内容的提问来源于stack exchange,提问作者lrv-eps

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 18:39:28