我的生产设置如下:
使用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,正在被网址重写替换为 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。它也只能针对某些重定向。大多数情况下,这里提到的行为是必需的,因为所有重定向都被重定向到主代理服务器。有人可以为某些重定向建议解决方案或解决方法吗?
答案 0 :(得分:1)
在IIS>下查看Application Request Routing设置[服务器]>应用程序请求路由和操作侧栏服务器代理设置> for 在响应标头中反向重写主机。对于您想要的行为,取消选中该复选框。这是服务器级别设置,负责任地使用。
您还可以修改%WinDir%\System32\Inetsrv\Config\applicationHost.config
。基本上在<system.webServer>
标记之间的文件中插入/更新以下行。
<proxy enabled="true" reverseRewriteHostInResponseHeaders="false" />
我会假设此设置也可用于每个站点,但我在web.config文件中尝试代理设置并未确认。
答案 1 :(得分:0)
查看global.asax.它是一个HTTPModule。所有请求在到达页面处理程序之前都会通过此文件和其他模块。使用此选项可以对您的请求或响应执行某些任务,例如网址路由,全局错误处理等。此文件用于实现应用程序和会话级事件,例如:
Application_Init - 在应用程序首次初始化时触发
Application_Start - 在应用程序首次启动时触发
Application_End - 应用程序结束或超时时触发的最终事件
Session_Start - 第一次启动用户会话时触发
Application_BeginRequest - 随每个新请求触发
Application_EndRequest - 在应用程序结束时触发
Application_AuthenticateRequest - 该事件表示请求已准备好进行身份验证。
Application_Error - 在应用程序中发生未处理的错误时触发
Session_End - 在单个用户会话结束或超时时触发。
答案 2 :(得分:0)
我能够用IIS中的出站规则解决同样的问题。因此,您必须在URL重写模块中的IIS中创建出站规则以修改位置标头。您必须检查302状态标头作为条件,并为Location标头提供匹配URL和操作URL。以下是参考文章中的步骤。
使用IIS URL重写修改位置标头