asp.net-core - 具有身份验证的 Blazor 服务器反向代理
问题描述
我有一个通过 OpenID / Okta 使用身份验证的 blazor 服务器端应用程序(netcore 3)。
我开始通过 IIS 对其进行测试,并将其作为常规网站运行就可以了。
但是,由于我们的其余设置,我需要通过反向代理运行它,并且在我设置之后,blazor 站点不再起作用。
我们的反向代理很简单,只需要一个 url (https://subdomain.domain.com),并在内部路由它 (http://localhost:8093)。这里连接了其他站点,这只是一个示例。
通过添加“app.UseForwardedHeaders”,我设法使所有资源(css、js、图像)正常工作,但我仍然遇到身份验证问题。
对于身份验证,它使用 services.AddAuthentcation 和 AddOpenIdConnect 进行设置,这是由对 Account/Login 的 MVC 调用触发的,它发出 HttpContext.ChallengeAsync。
独立运行应用程序,或在其网站中运行,登录有效,并重定向到 Okta(https://oktadevurl.com/oauth2/default/v1/authorize?parameters)。
通过反向代理,此url变为相对于不正确的代理地址(https://subdomain.domain.com/oauth2/default/v1/authorize?parameters )。
我已经仔细检查了转发标题和 OpenId / Okta 设置。我正在寻找以前遇到过此问题的任何人,并且可以为我指明正确的方向,了解如何通过反向代理从 blazor 获取绝对 URL。
谢谢。
解决方案
我能够通过一个小复选框来解决这个问题,即 ARR:
在 IIS 管理器中,选择当前服务器(不是网站),打开应用程序请求路由,在右侧栏中将有一个选项服务器代理设置。在那里你会看到“Reverse rewrite host in response headers”选项。如果选中 - 取消选中它,您的问题应该得到解决。
推荐阅读
- c# - 如何对 List1 (int) 进行排序,以便相应的 List2 (string) 也进行排序?
- css - 可变宽度的图像条
- java - Cloud Dataflow:动态更改 bigquery 目标
- javascript - JSON.parse 里面有函数
- glassfish - jpa、persistence.xml、glassfish netbeans ide postgresql db pool an jdbc resource和jta的问题
- flutter - Flutter DraggableScrollableSheet - 如何以编程方式展开/折叠
- command-line - 如何在命令行中打开和编辑文件?
- javascript-objects - 是否可以将使用对象的函数的结果分配给 PHP 变量?
- angular - 对象数组作为 Material Angular 表的数据源
- codeigniter - 使用 Codeigniter 执行存储过程的问题