Azure Active Directory与Umbraco 8集成失败,兼容性问题求助
你遇到的是Umbraco版本迭代中常见的身份认证模块兼容性问题——Umbraco 8对身份认证系统做了重大重构,旧的UmbracoCms.IdentityExtensions(1.0.1版本)仅适配Umbraco 7.x系列(约束条件明确标注>=7.3.0 && <8.0.0),自然和Umbraco 8.0.0的核心库无法兼容。下面是具体的解决思路和落地步骤:
一、先清理冲突的旧依赖
首先要把不兼容的UmbracoCms.IdentityExtensions从项目中移除,避免后续依赖混乱:
在NuGet包管理器控制台执行命令:
Uninstall-Package UmbracoCms.IdentityExtensions
二、使用Umbraco 8原生的ASP.NET Core集成方案
Umbraco 8完全基于ASP.NET Core构建,无需依赖旧的Identity扩展包,直接用官方的Azure AD认证中间件就能完成集成。
1. 安装Azure AD认证包
在NuGet包管理器控制台安装所需依赖:
Install-Package Microsoft.AspNetCore.Authentication.AzureAD.UI
2. 配置Azure AD认证服务
打开项目的Startup.cs,在ConfigureServices方法中添加Azure AD认证配置:
using Microsoft.AspNetCore.Authentication.AzureAD.UI; public void ConfigureServices(IServiceCollection services) { // 保留Umbraco原有服务配置 services.AddUmbraco(_env, _config) .AddBackOffice() .AddWebsite() .AddComposers() .Build(); // 配置Azure AD认证 services.AddAuthentication(AzureADDefaults.AuthenticationScheme) .AddAzureAD(options => _config.Bind("AzureAd", options)); // 适配Umbraco的Cookie认证规则 services.Configure<CookieAuthenticationOptions>(AzureADDefaults.CookieScheme, options => { options.LoginPath = "/umbraco"; // 若集成前台成员,可改为前台登录路径 options.AccessDeniedPath = "/umbraco/access-denied"; }); }
3. 启用认证中间件
在Configure方法中确保认证中间件在Umbraco中间件之前加载:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } // 启用身份认证 app.UseAuthentication(); // 保留Umbraco原有中间件配置 app.UseUmbraco() .WithMiddleware(u => { u.UseBackOffice(); u.UseWebsite(); }) .WithEndpoints(u => { u.UseInstallerEndpoints(); u.UseBackOfficeEndpoints(); u.UseWebsiteEndpoints(); }); }
4. 配置Azure AD应用信息
在appsettings.json中添加Azure AD的应用配置(信息来自你在Azure门户注册的应用):
"AzureAd": { "Instance": "https://login.microsoftonline.com/", "Domain": "你的租户域名.onmicrosoft.com", "TenantId": "你的租户ID", "ClientId": "你的应用客户端ID", "CallbackPath": "/signin-oidc" }
三、用户同步与权限配置(可选但关键)
Azure AD认证通过后,需要将用户信息同步到Umbraco的用户/成员系统,否则用户无法访问后台或受保护的前台内容:
- 可以实现
IClaimsTransformer接口,在认证成功后将Azure AD声明映射到Umbraco用户; - 或者在Azure AD认证成功事件中,自动创建/更新Umbraco用户并分配对应角色权限。
替代方案:社区兼容包
如果觉得手动配置繁琐,也可以选择社区维护的Umbraco 8专属Azure AD集成包(比如Umbraco.Community.AzureAD这类),但优先推荐官方ASP.NET Core集成方案,稳定性更有保障。
内容的提问来源于stack exchange,提问作者user820955

