Jam*_*ock 5 c# asp.net azure azure-web-sites docker
如何使ASP.net核心在与Azure应用容器服务一起使用的SSL上的docker中运行?
我可以在HTTP上运行它,但是一旦我尝试将其绑定到SSL,ASP.NET对oauth甚至swagger之类的验证就可以正常工作,它无法告诉我“无法配置HTTPS端点。没有服务器证书。指定,并且找不到默认的开发人员证书。” vs.net生成的仅运行时映像无法运行运行证书,即使那样,这似乎也不安全,可能是由于浏览器中的证书错误所致。
基本上,我需要https始终从外部端点开始工作,以便kestrel进行加密等操作,而不是ngix或默认情况下在外部代理上运行的任何操作。
这在vs.net调试中效果很好,因为它不会遇到任何错误,即使绑定到https也可以正常工作。
遗憾的是,该文档仅处理最基本的用例,而未概述如何使真实的https网站与aspnet核心和Azure应用容器可靠地协同工作。
在到处搜索之后,我能够整理出一些钝的参考文献并提出解决方案。
Kestrel将处于HTTP模式,但是将通过反向代理的ForwardedHeaders告知其处于HTTPS模式。对于Azure,必须使用一组特定的设置。其他人将需要其他选项,并且可能需要其他设置。本文档将在一般情况下为您提供帮助,但没有Azure所需的条件: ASPNet Core反向代理和负载均衡器配置
如果您使用的是IIS,那么它就可以工作,因为它是内置的,或者您在Core的过去版本中添加了UseIIS。
对于基于容器或基于Linux的Azure Web Services,您需要添加以下Nuget程序包:
Microsoft.AspNetCore.HttpOverrides
将它作为第一件事添加到Startup.cs中的“配置”之后,您需要添加以下内容:
var forwardOptions = new ForwardedHeadersOptions
{
ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto,
RequireHeaderSymmetry = false
};
forwardOptions.KnownNetworks.Clear();
forwardOptions.KnownProxies.Clear();
app.UseForwardedHeaders(forwardOptions);
Run Code Online (Sandbox Code Playgroud)
请注意,如果没有KnownNetworks和KnownProxies Clear(),它将无法正常工作。如果没有RequireHeaderSymmetry = false,它将无法正常工作,因此您需要所有这些。
在ForwardedHeaders上,您将尝试避免.All或列出的其他选项,因为它具有安全漏洞。
然后,在应用程序设置您需要添加WEBSITES_PORT=80,ASPNETCORE_URLS=http://+:80和ASPNETCORE_HTTPS_PORT=443。直到所有这些都包含在内,您将继续遇到稍微不同的错误。
注意:这不会修复Swagger的验证器。还有其他问题,因为验证器错误。json仍然有效,但域不同,因此很奇怪。解决这个问题的简单方法是在UseSwaggerUi设置options.EnableValidator(null);中。
app.UseSwaggerUI(
options =>
{
options.EnableValidator(null);
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
779 次 |
| 最近记录: |