Umbraco 14后台登录失败:服务器仅接受HTTPS请求
Umbraco 14后台登录HTTPS错误解决指南
Umbraco 14 HTTPS强制机制的关键变更
- 升级依赖的OpenIddict版本,默认启用严格HTTPS校验,所有认证请求必须通过HTTPS,无HTTP回退机制。
- 优化
ForwardedHeaders中间件默认配置,但在反向代理(Azure App Service、IIS)或Docker环境下,若请求头传递异常,应用无法识别外部HTTPS请求。 - 移除旧版本中宽松的HTTPS兼容设置,强制遵循OAuth2/OpenID Connect安全规范。
分步解决方案
1. 配置ForwardedHeaders中间件
在Program.cs中添加并优先运行该中间件,确保应用能识别代理传递的HTTPS标识:
builder.Services.Configure<ForwardedHeadersOptions>(options => { options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto; // 生产环境建议指定Azure/IIS的代理IP段,示例为Azure内部常用段 options.KnownProxies.Add(IPAddress.Parse("10.0.0.0/8")); }); // 必须在UseUmbraco之前调用 app.UseForwardedHeaders(); app.UseUmbraco();
2. 调整OpenIddict适配代理场景
在Program.cs中显式配置OpenIddict使用转发头:
builder.Services.AddUmbraco(builder.Environment, builder.Configuration) .AddBackOffice() .AddWebsite() .AddComposers() .Build(); builder.Services.Configure<OpenIddictServerOptions>(options => { options.UseForwardedHeaders(); // 仅测试场景临时禁用HTTPS强制(生产环境禁止) // options.RequireSsl = false; });
3. 检查Azure/Docker环境配置
- Azure App Service:
- 门户“配置→常规设置”开启“HTTPS强制”;
- “网络→应用服务代理”启用“转发客户端IP”和“转发协议”。
- Docker容器:
- 确保容器端口映射到Azure的HTTPS端口(443);
- Dockerfile不要覆盖应用的HTTPS相关配置。
4. 本地IIS部署补充设置
- 确认站点HTTPS绑定的SSL证书有效;
- 启用IIS的“ARR代理”功能,在站点“应用程序请求路由”中开启“启用代理”,保证请求头正确转发。
5. 验证请求头传递
添加临时中间件检查X-Forwarded-Proto头是否为https:
app.Use(async (context, next) => { Console.WriteLine($"X-Forwarded-Proto: {context.Request.Headers["X-Forwarded-Proto"].FirstOrDefault()}"); await next(); });
Docker+Azure环境的特殊影响
Docker容器内部通常运行HTTP端口(如80),外部由Azure代理处理HTTPS终止。若ForwardedHeaders配置错误,应用会误判请求为HTTP,触发OpenIddict的HTTPS强制错误。必须确保代理正确传递X-Forwarded-Proto头,且应用正确处理该头。
内容的提问来源于stack exchange,提问作者Ayo Adesina
相关产品推荐
相关产品推荐

