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

Umbraco CMS集成Azure SSO登录报错:AuthenticationFailureException

解决Umbraco Azure SSO登录时的"Unable to unprotect the message.State"错误

以下是针对该错误的具体解决方案:

1. 移除手动注册的认证服务,使用AzureSSO包的内置扩展

你当前在ConfigureServices中手动添加了AddAuthentication和AddMicrosoftIdentityWebApp,但Umbraco.Community.AzureSSO包已经封装了完整的认证配置逻辑,手动注册会导致认证上下文冲突,进而引发数据保护解密失败。

修改ConfigureServices方法:

public void ConfigureServices(IServiceCollection services)
{
    // 移除以下手动认证注册代码
    // services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
    //     .AddMicrosoftIdentityWebApp(_config.GetSection("AzureSSO:Credentials"));

    services.AddUmbraco(_env, _config)
           .AddBackOffice()
           .AddWebsite()
           .AddDeliveryApi()
           .AddAzureSSO() // 添加AzureSSO包的扩展方法
           .AddComposers()
           .Build();

    services.AddCors();
}

2. 验证数据保护配置的正确性

Unable to unprotect错误本质是数据保护系统无法解密认证流程中的state参数,需确保:

  • 你的Composer中builder.AddUmbracoDataProtection()已正确注册,该方法会配置Umbraco兼容的数据保护密钥存储
  • 多环境(开发/生产)下数据保护密钥保持一致:生产环境避免使用临时内存存储,Umbraco的AddUmbracoDataProtection默认会将密钥存储在Umbraco的数据库中,确保生产环境配置正确

3. 确认Azure AD应用注册的重定向URI与配置完全匹配

Azure AD应用注册中的重定向URI必须和appsettings.json里的CallbackPath完全一致,包括路径结尾的斜杠:

  • 开发环境示例:https://localhost:44304/umbraco-microsoft-signin/
  • 生产环境示例:https://your-domain.com/umbraco-microsoft-signin/

同时确保SignedOutCallbackPath也在Azure AD的前端注销URI中配置正确。

4. 清除浏览器缓存与认证Cookie

旧的无效认证Cookie可能导致state参数解密失败,执行以下操作后重试:

  • 清除浏览器的缓存和Cookie
  • 重启应用程序,确保所有缓存的配置和密钥都被刷新

5. 检查中间件顺序

确保中间件顺序符合ASP.NET Core的规范:

// 正确顺序
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthentication(); // 认证在授权之前
app.UseAuthorization();
app.UseCors(...); // CORS中间件在认证之后,Umbraco中间件之前
app.UseUmbraco(...);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 16:40:16