我在使用基于路径的路由将我的 Open Auth ID .net Core 2 应用程序配置为 Web 应用程序防火墙后面的应用程序服务时遇到问题。
我的应用程序是 myapp.azurewebsites.net,其网络限制使其无法从公共 Internet 访问。我在同一个 VNET 中部署了 WAF,并允许使用基于路径的路由“/Admin*”在 WAF 和应用服务之间进行流量。
效果是https://myapp.azurewebsites.net无法通过 Internet 访问,但https://myWAF/Admin可以访问并映射到应用服务。
此设置工作正常,但是当我将 Open ID auth 引入我的 .net 核心应用程序时,传出 Location 标头包含其 myapp.azurewebsites.net/signin-oidc 作为回复 URI。
这不起作用,因为无法从 Internet 访问主机。我尝试了几种方法;
- 我在 Azure App Registrations 的应用程序注册 URL 中添加了 WAF URL ( https://myWAF/Admin/signin-oidc ),以允许 AAD 接受修改后的 URL(作为合法的
- 我在我的 startup.cs 中编写了 app.UseForwardedHeaders (强制重用所有 X-Forwarded 标头)。这似乎对我的应用服务发送的 Location 标头没有任何影响。我认为 WAF 正在发送 X-Forwarded 标头,但如果是,则 Open Auth ID 堆栈没有使用它们。
- 我在 WAF 中编写了一个标头重写代码,以将 myapp.azurewebsites.net 替换为 WAF URL。这确实会正确替换 URL 并允许回调,但随后会因关联错误而失败(这似乎是一个通用的 Open ID 堆栈错误,意思是“随机数不匹配”。随机数可能基于被调用的 URL回到 - 在我的情况下,由于 WAF 重定向而发生变化,但这是一个猜测)。
在我看来,我应该能够在我的应用程序中使用 X-Forwarded 标头来解决在 WAF 中对标头重写进行编码的需要,但是我找不到成功使用它来更改的示例Open ID 发出的回复 URI。
我的问题;使用 X-Forwarded 标头是在 OAuth 上下文中处理代理的正确方法,还是在 WAF 中重写标头是正确的方法?
我已经设定