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

使用Azure B2C认证的Blazor项目如何自定义Microsoft Identity端点与页面

Blazor + Azure B2C 自定义Microsoft Identity认证端点与页面解决方案

1. 自定义登录/登出端点路径

默认MicrosoftIdentity/Account/SignIn、MicrosoftIdentity/Account/SignOut端点由Microsoft.Identity.UI内置配置,自行创建AccountController不生效是因为内置路由优先级更高,直接在Program.cs中修改路由映射即可:

// 注册服务阶段配置
builder.Services.AddControllersWithViews()
    .AddMicrosoftIdentityUI()
    .AddRazorPagesOptions(options =>
    {
        // 重写内置端点的访问路径
        options.Conventions.AddAreaPageRoute("MicrosoftIdentity", "/Account/SignIn", "account/signin");
        options.Conventions.AddAreaPageRoute("MicrosoftIdentity", "/Account/SignOut", "account/signout");
        options.Conventions.AddAreaPageRoute("MicrosoftIdentity", "/Account/SignedOut", "account/signedout");
    });

// 中间件配置阶段确保开启控制器路由映射
app.MapControllers();
app.MapRazorPages();

配置完成后,自定义的account/signin等路径和原有官方路径同时生效,无需修改现有代码的跳转逻辑。

2. 修改登出后跳转规则

直接修改MicrosoftIdentityOptions的配置即可覆盖默认跳转逻辑:

builder.Services.Configure<MicrosoftIdentityOptions>(options =>
{
    // 修改登出回调处理路径
    options.SignedOutCallbackPath = "/account/signedout";
    // 配置登出完成后最终跳转的站点地址,例如跳转到首页
    options.SignedOutRedirectUri = "/";
});

如果配置了SignedOutRedirectUri,请求会直接跳转到指定地址,不会再加载SignedOut页面

3. 解决SignedOut.cshtml CS0436冲突警告

该警告是你手动创建的Areas/MicrosoftIdentity/Pages/Account/SignedOut.cshtml和Microsoft.Identity.UI内置的同名页面生成的类名冲突,两种解决方案:

  • 无需自定义页面内容:直接删除你创建的SignedOut相关文件,使用上述路由和跳转配置即可满足需求
  • 需要自定义页面内容:在你的SignedOut.cshtml头部明确指定命名空间,避免和官方类冲突:
    @page "/account/signedout"
    @namespace YourProjectName.Areas.MicrosoftIdentity.Pages.Account
    @model YourProjectName.Areas.MicrosoftIdentity.Pages.Account.SignedOutModel
    @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
    
    同时清理项目的bin、obj文件夹后重新编译即可消除警告。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 08:48:04