gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 03:59:15 28 4
gpt4 key购买 nike

我正在框架 2.2 上构建一个 ASP.NET Core Web 应用程序,并托管在 Linux 应用服务计划上的 Azure 应用服务上。

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

Azure 应用服务似乎正在终止 SSL 连接并代理到我的应用程序。 有没有办法配置 Azure 应用服务,以便 https 请求不加修改地发送到我的应用程序?或者至少HttpRequest.Scheme与原始请求相符吗?

<小时/>

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

var healthStatus = new
{
Port = context.Request.Host.Port?.ToString() ?? "unknown",
context.Request.Scheme,
context.Request.IsHttps,
Headers = context.Request.Headers.Select(x => $"{x.Key}:{x.Value}").ToArray()
};

context.Response.ContentType = "application/json";
await context.Response.WriteAsync(JsonConvert.SerializeObject(healthStatus));

本地VS调试:https://localhost:1234/ping :

{
"Port":1234,
"Scheme": "https",
"IsHttps": true,
"Headers": <standard headers - nothing interesting>
}

部署到 Azure 应用服务:https://appServiceExample.myDomain.com/ping :

{
"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 header ?但这似乎有点黑客行为,因为我宁愿检查原始传入请求 - 而且我不确定这些 header 的可靠性。

最佳答案

总结一下您的评论。

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

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

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

如果必须进行检查,请改为针对 X-ARR-SSL 进行检查。

更多详情可以引用这个SO thread .

关于c# - Azure 应用服务在应用程序之前终止 https?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57344996/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com