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

.NET 9 Blazor Server中Azure B2C独立注册流程配置异常排查

问题:.NET 9.0 Blazor Server + Azure B2C 独立注册流配置失败

我在.NET 9.0 Blazor Server应用中使用Microsoft.Identity.Web实现Azure B2C的注册与登录功能,目前已通过「注册和登录合并用户流」实现功能,但该方式对明确需要注册的用户不够友好(担心新用户会混淆或未注意到登录页同时支持注册)。

于是配置了独立的Sign Up用户流,模仿Microsoft账户控制器中的SignIn动作编写了SignUp方法,仅修改为传入SignUp策略名:

[HttpGet("MicrosoftIdentity/Account/SignUp")]
public IActionResult SignUp()
{
    var scheme = OpenIdConnectDefaults.AuthenticationScheme;
    var redirectUrl = Url.Content("~/");

    var properties = new AuthenticationProperties { RedirectUri = redirectUrl };
    properties.Items[Constants.Policy] = "B2C_1_SignUp";
    
    return Challenge(properties, scheme);
}

但访问注册路由时,最终被重定向到MicrosoftIdentity/Account/Error并返回404,输出窗口出现错误信息:

Microsoft.AspNetCore.Authentication.OpenIdConnect.OpenIdConnectHandler: Error: Message contains error: 'unauthorized_client', error_description: 'AADB2C90057: The provided application is not configured to allow the 'OAuth' Implicit flow.

已确认策略名称正确,若将策略改为「注册和登录合并策略」则可正常运行。请问我的需求是否可行?遗漏了哪些配置?


解决方案

需求可行性

完全可行,Azure B2C支持独立的注册/登录用户流,Microsoft.Identity.Web也可以通过自定义控制器动作实现该场景。

缺失的配置

错误信息明确指向应用未启用对应授权流,需完成以下配置:

  1. Azure B2C应用注册配置

    • 登录Azure门户,进入目标B2C租户和应用注册页面
    • 进入「认证」>「隐式授权和混合流」,勾选ID令牌选项(Blazor Server基于授权码流,但独立注册流需要显式允许ID令牌的隐式发放)
    • 保存配置变更
  2. 补充appsettings.json中的策略配置

    • 确保配置文件中已添加独立注册策略的相关项,示例如下:
      "AzureAdB2C": {
        "Instance": "https://yourtenant.b2clogin.com/",
        "Domain": "yourtenant.onmicrosoft.com",
        "ClientId": "你的客户端ID",
        "SignedOutCallbackPath": "/signout/B2C_1_SignUp",
        "SignUpPolicyId": "B2C_1_SignUp",
        "SignInPolicyId": "B2C_1_SignIn",
        "ResetPasswordPolicyId": "B2C_1_ResetPassword"
      }
      
    • 若之前仅配置了合并策略,必须补充独立注册策略的配置项。
  3. 优化控制器动作代码

    • 使用Microsoft.Identity.Web提供的ChallengeAsync扩展方法,简化代码并避免手动指定Scheme的潜在问题:
      [HttpGet("MicrosoftIdentity/Account/SignUp")]
      public async Task<IActionResult> SignUp()
      {
          var redirectUrl = Url.Content("~/");
          return await HttpContext.ChallengeAsync(OpenIdConnectDefaults.AuthenticationScheme,
              new AuthenticationProperties { RedirectUri = redirectUrl }
              {
                  Items = { { Constants.Policy, "B2C_1_SignUp" } }
              });
      }
      

额外检查项

  • 确认独立注册用户流的配置中,当前应用已被添加为允许的客户端
  • 检查应用注册的「API权限」是否包含openid、profile等必要权限

内容的提问来源于stack exchange,提问作者Travis Troyer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 02:07:25