如何解决azure appservice容器未获得HTTPS方案
我有一个简单的asp.net core 3.1应用程序,可在index.cshtml页面中打印出HTTPRequest。 我将应用程序容器化,并在azure appservice中运行它。
我不拥有很多代码,例如Microsoft OIDC东西,它们依赖于HTTPRequest.Scheme来构建重定向URL。进入我的容器化应用的请求是HTTP,即使原始请求的网址看起来像这样;
https://app-chaosbunny.azurewebsites.net/
当我打印出应用程序认为在HTTPRequest中的内容时,我得到了;
http://app-chaosbunny.azurewebsites.net/
不用说,当OIDC的东西构建了redirectUrl时,它就是HTTP方案,这是错误的。
“应用程序服务”有一个TLS / SSL设置,您可以在其中打开“仅HTTPS”。这没有效果。
我是否缺少强制实施正确方案的设置,并将其传递给容器?
解决方法
这很可能是由于App Service在前端终止SSL导致的。向您的应用程序所在的工作程序发出的请求始终是HTTP。检查X-Arr-Ssl标头。该标头的存在会告诉您该请求是作为SSL请求传入的。
吉姆
,没有关于容器的应用服务所发生的一切的具体文档,这个答案可能不正确,但可以。
我发现以下标头是从appService发送到容器化应用的。
X-ARR-SSL 2048|256|C=US,S=Washington,L=Redmond,O=Microsoft Corporation,OU=Microsoft IT,CN=Microsoft IT TLS CA 5|CN=*.azurewebsites.net
X-Forwarded-Proto https
X-AppService-Proto https
文档中列出的以下方法对我不起作用。
app.UseForwardedHeaders();
开始代码段
当无法添加转发的标头并且所有请求都是安全的
在某些情况下,可能无法将转发的标头添加到代理到应用程序的请求中。如果代理要求所有公共外部请求均为HTTPS,则可以在使用任何类型的中间件之前在Startup.Configure
中手动设置该方案:
C# 复制
app.Use((context,next) =>
{
context.Request.Scheme = "https";
return next();
});
可以在开发或登台环境中使用环境变量或其他配置设置禁用此代码。
结束摘要
我将以下代码放在public void Configure(IApplicationBuilder app,IWebHostEnvironment env)
的第一行
public void Configure(IApplicationBuilder app,IWebHostEnvironment env)
{
app.Use(async (context,next) =>
{
context.Request.Scheme = "https";
await next();
});
....
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。