首页 > 解决方案 > 具有身份验证的 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。

谢谢。

标签: asp.net-coreiisblazor

解决方案


我能够通过一个小复选框来解决这个问题,即 ARR:

在 IIS 管理器中,选择当前服务器(不是网站),打开应用程序请求路由,在右侧栏中将有一个选项服务器代理设置。在那里你会看到“Reverse rewrite host in response headers”选项。如果选中 - 取消选中它,您的问题应该得到解决。


推荐阅读