【发布时间】:2022-01-08 23:39:18
【问题描述】:
Microsoft's own documentation on HSTS 对 HSTS、HTTPS 重定向和 API 说了以下内容:
Web API 应该:
- 不监听 HTTP。
- 关闭状态码为 400(错误请求)的连接并且不处理请求。
…
…通过 HTTP 对 API 的单个经过身份验证的调用会在不安全的网络上存在风险。安全的方法是将 API 项目配置为仅通过 HTTPS 侦听和响应。
我的收获是:API 不应该重定向,因为客户端可能很乐意通过 HTTP 发送敏感数据,并且由于重定向,一切都“正常工作”。即使对于浏览器和使用 HSTS 时,第一个请求(带有潜在敏感数据)也可以使用 HTTP 完成。相反,API 应该失败 HTTP 请求并仅通过 HTTPS 响应。
在花了一天的大部分时间研究这个之后,我发现在 Azure 应用服务/Web 应用中,似乎没有简单的方法来遵循这些建议。无论“HTTPS Only”是打开还是关闭,都可以通过 HTTP 调用 API:如果打开,它会重定向到 HTTPS,如果关闭,它完全可以通过 HTTP 使用而无需重定向。有人会认为有一种简单的方法可以让应用服务/网络应用仅通过 HTTPS 进行侦听。例如,如果“仅 HTTPS”按钮是关闭/重定向/打开。
文件说:
要在 API 中禁用 HTTP 重定向,请设置 ASPNETCORE_URLS 环境变量或使用 --urls 命令行标志。有关详细信息,请参阅 Andrew Lock 的 Use multiple environments in ASP.NET Core 和 5 ways to set the URLs for an ASP.NET Core app。
不幸的是,这两个链接都没有描述这是否与应用服务/Web 应用相关,或者环境变量应该是什么。我无法让它工作。这似乎还需要复制任何自定义域,迫使您记住使环境变量与自定义域的更改保持同步。
如何使 Azure 应用服务/Web 应用仅在 HTTPS 上侦听?
【问题讨论】:
标签: asp.net-core iis azure-web-app-service