Umbraco 14 内网应用无缝Entra SSO实现方案咨询
在Umbraco 14中实现Entra无缝SSO(绕过Members功能)
核心思路
直接基于ASP.NET Core原生认证体系集成Entra OpenID Connect,完全绕过Umbraco的Members系统,同时通过路径区分逻辑保留后台编辑者的用户名密码登录流程,不破坏Umbraco核心功能。
步骤1:配置Entra OIDC认证
在Program.cs中添加Entra认证配置,同时隔离前台与后台的认证逻辑:
var builder = WebApplication.CreateBuilder(args); // 初始化Umbraco服务 builder.CreateUmbracoBuilder() .AddBackOffice() .AddWebsite() .AddDeliveryApi() .AddComposers() .Build(); // 配置Entra OIDC作为前台默认认证 builder.Services.AddAuthentication(options => { options.DefaultAuthenticateScheme = OpenIdConnectDefaults.AuthenticationScheme; options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme; }) .AddOpenIdConnect(OpenIdConnectDefaults.AuthenticationScheme, options => { builder.Configuration.Bind("EntraOIDC", options); options.SaveTokens = true; options.ResponseType = "code"; options.CallbackPath = "/signin-oidc"; // 需在Entra门户配置对应回调地址 // 拦截后台路径,避免强制跳转到Entra options.Events = new OpenIdConnectEvents { OnRedirectToIdentityProvider = context => { if (context.Request.Path.StartsWithSegments("/umbraco")) { context.Response.StatusCode = StatusCodes.Status401Unauthorized; context.HandleResponse(); } return Task.CompletedTask; } }; }); // 配置授权策略 builder.Services.AddAuthorization(options => { // 前台默认要求Entra认证 options.DefaultPolicy = new AuthorizationPolicyBuilder() .RequireAuthenticatedUser() .Build(); // 保留Umbraco后台专属授权策略 options.AddPolicy("UmbracoBackOffice", policy => { policy.RequireRole("Administrators", "Editors"); policy.AddAuthenticationSchemes(Umbraco.Cms.Core.Security.BackOfficeAuthenticationBuilder.BackOfficeAuthenticationScheme); }); }); var app = builder.Build(); // 认证/授权中间件必须在Umbraco中间件之前注册 app.UseAuthentication(); app.UseAuthorization(); // 启动Umbraco await app.BootUmbracoAsync(); app.Run();
在appsettings.json中补充Entra配置参数:
"EntraOIDC": { "ClientId": "你的Entra应用客户端ID", "ClientSecret": "你的Entra应用客户端密钥", "Authority": "https://login.microsoftonline.com/你的租户ID/v2.0", "SignedOutCallbackPath": "/signout-callback-oidc", "Scope": "openid profile email" }
步骤2:实现自动无缝SSO
由于已将Entra OIDC设为默认挑战方案,匿名用户访问前台页面时会自动重定向到Entra登录;若用户已在内网完成Entra登录,会直接完成SSO流程,无需手动点击登录按钮。
步骤3:保留后台编辑者的用户名密码登录
通过OIDC事件中的路径判断,当请求指向/umbraco后台时,取消Entra重定向,让Umbraco使用原生的后台认证流程,编辑者可以继续用用户名密码登录CMS,不受前台SSO逻辑影响。
步骤4:获取用户信息用于日志与个性化
在前台控制器或视图中,直接通过HttpContext.User获取Entra用户的身份信息:
// 控制器中获取用户信息示例 var userEmail = User.FindFirstValue(ClaimTypes.Email); var userName = User.FindFirstValue(ClaimTypes.Name); // 写入访问日志 logger.LogInformation("用户 {Email} 访问了首页", userEmail);
注意事项
- 需在Entra门户中正确配置回调路径
/signin-oidc和注销路径/signout-callback-oidc - 无需启用Umbraco的Members功能,避免认证逻辑冲突
- 若需部分前台页面允许匿名访问,可在对应控制器/Action上添加
[AllowAnonymous]特性
内容的提问来源于stack exchange,提问作者Chris Disley
相关产品推荐
相关产品推荐

