ASP.NET OAuth存在URL重写问题

Gur*_*uru 14 asp.net oauth url-rewrite-module arr

我的生产设置如下:

  • M1 - ASP.NET网站
  • M2 - IIS URL重写2.0 + ARR 3.0

使用IIS URL Rewrite,对M2的任何请求,例如http:// m2 /app/login.aspx将被重定向到M1,如http:// m1 /app/login.aspx.

在M1上,ASP.NET Open Auth已在网站上实施,以使用Google外部身份验证.当用户点击Google按钮时,浏览器将被重定向到Google登录页面以允许用户进行身份验证.

但是当从M2访问网站时,.net oAuth(https:// accounts.google.com/[query-string])生成的重定向网址将重定向到Google,正在被URL重写替换为http:// m2/[query-string].

所以要清楚; 当通过外部身份验证提供程序进行身份验证请求时,返回302重定向.通常这种形式可能如下所示:

响应标题:

...

位置:https:// accounts.google.com/o/oauth2/auth?big_long_query_string

...

此重定向由位于代理服务器后面的服务器(M1)创建(M2 - IIS URL Rewrite 2.0 + ARR 3.0).因此,重写服务器将Location标头重写为:

响应标题:

...

位置:http:// M1/o/oauth2/auth?big_long_query_string

...

我们需要的是一条规则,它不会在重定向时重写位置URL.它也只能针对某些重定向.大多数情况下,这里提到的行为是必需的,因为所有重定向都被重定向到主代理服务器.有人可以为某些重定向建议解决方案或解决方法吗?

der*_*eli 4

查看IIS > [服务器] >应用程序请求路由下的应用程序请求路由设置以及操作侧边栏服务器代理设置 >响应标头中的反向重写主机。对于您想要的行为,请取消选中该复选框。这是服务器级别的设置,请负责任地使用。

您还可以编辑%WinDir%\System32\Inetsrv\Config\applicationHost.config. 基本上在文件中的标签之间插入/更新以下行<system.webServer>

<proxy enabled="true" reverseRewriteHostInResponseHeaders="false" />
Run Code Online (Sandbox Code Playgroud)

我假设此设置也适用于每个站点,但我对代理设置的 web.config 文件的尝试并未证实这一点。