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

Azure Active Directory与Umbraco 8集成失败,兼容性问题求助

解决Umbraco 8与Azure Active Directory集成的版本兼容问题

你遇到的是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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 03:58:52