C# Azure应用程序服务在应用程序之前终止https?

C# Azure应用程序服务在应用程序之前终止https?,c#,azure,.net-core,azure-web-app-service,httpcontext,C#,Azure,.net Core,Azure Web App Service,Httpcontext,我正在Framework2.2上构建一个asp.net核心web应用程序,并在linux应用程序服务计划的azure应用程序服务上托管 在我的应用程序中,我检查。如果我使用https发出请求,在本地运行此命令将返回https。在azure上运行时,它返回http Azure App Services似乎正在终止SSL连接并代理到我的应用是否有办法配置Azure应用程序服务,以便https请求将其发送到我的应用程序而不被修改?或者至少与原始请求匹配? 我构建了一个示例诊断页面来显示这种行为: v

我正在Framework2.2上构建一个asp.net核心web应用程序,并在linux应用程序服务计划的azure应用程序服务上托管

在我的应用程序中,我检查。如果我使用https发出请求,在本地运行此命令将返回
https
。在azure上运行时,它返回
http

Azure App Services似乎正在终止SSL连接并代理到我的应用是否有办法配置Azure应用程序服务,以便https请求将其发送到我的应用程序而不被修改?或者至少与原始请求匹配?


我构建了一个示例诊断页面来显示这种行为:

var healthStatus=new
{
Port=context.Request.Host.Port?.ToString()??“未知”,
context.Request.Scheme,
context.Request.IsHttps,
Headers=context.Request.Headers.Select(x=>$“{x.Key}:{x.Value}”).ToArray()
};
context.Response.ContentType=“应用程序/json”;
wait context.Response.WriteAsync(JsonConvert.SerializeObject(healthStatus));
在VS本地调试:
https://localhost:1234/ping

{
   "Port":1234,
   "Scheme": "https",
   "IsHttps": true,
   "Headers": <standard headers - nothing interesting>
}
{
   "Port":"unknown",
   "Scheme": "http",
   "IsHttps": false,
   Headers: [ 
     // there are several more headers, but only these looked interesting:
     "X-Forwarded-For:195.206.xxx.xxx:6922",
     "X-Forwarded-Proto:https",
     "X-AppService-Proto:https"
    ]
}

作为一种解决方法:我是否可以依靠
X-AppService-Proto
X-Forwarded-Proto
头解决这个问题?但这似乎有点像黑客,因为我更愿意检查原始传入的请求,而且我不确定这些标题有多可靠。

请总结一下您的评论

Azure应用程序服务前端层终止TLS通道(又名TLS卸载),并打开一个新的普通HTTP连接,连接到您的代码所在的Web Worker。路由由ARR(应用程序请求路由)执行

因此,从代码的角度来看,每个请求都是“不安全的”

X-Forwarded-Proto=https
关于原始请求(到达前端)的提示

如果必须进行检查,则根据
X-ARR-SSL
进行检查


有关更多详细信息,请参阅此项。

此处仅作猜测,但这是否有帮助?如果启用asp.net堆栈以查看SSL证书需要一个设置,我希望必须启用该设置才能使任何SSL处理代码正常工作。@很遗憾,它没有。我在应用程序服务中配置了SSL,我的证书已上载,从浏览器端看一切正常。这是唯一一个在调用我的应用程序代码之前SSL似乎终止的服务器端。@Philip,在这里看到我的答案-@evilSnobu-谢谢,我认为这是重复的-但我的google技能让我失望。可能是重复的