使用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头部明确指定命名空间,避免和官方类冲突:
同时清理项目的bin、obj文件夹后重新编译即可消除警告。@page "/account/signedout" @namespace YourProjectName.Areas.MicrosoftIdentity.Pages.Account @model YourProjectName.Areas.MicrosoftIdentity.Pages.Account.SignedOutModel @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
内容的提问来源于stack exchange,提问作者mwrochna
相关产品推荐
相关产品推荐

