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
相关产品推荐
相关产品推荐

