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
相关产品推荐
相关产品推荐

