14

我的生产设置如下:

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

使用 IIS URL 重写,对 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] ) 生成的重定向 url重定向到Google,正在被 URL Rewrite 替换为http:// m2 /[查询字符串]

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

响应标头:

...

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

...

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

响应标头:

...

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

...

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

4

3 回答 3

2

查看IIS > [SERVER] > Application Request Routing 和 Actions 侧栏 Server Proxy Settings > for Reverse rewrite host in response headers下的Application Request Routing设置。对于您想要的行为,取消选中该复选框。那是服务器级别的设置,请负责任地使用。

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

<proxy enabled="true" reverseRewriteHostInResponseHeaders="false" />

我会假设这个设置也可以在每个站点上使用,但是我对代理设置的 web.config 文件的尝试并没有证实这一点。

于 2015-11-11T22:36:48.090 回答
0

查看global.asax。 它是一个 HTTPModule。所有请求在到达您的页面处理程序之前都会通过此文件和其他模块。使用它来对您的请求或响应执行某些任务,例如url 路由、全局错误处理等。此文件用于实现应用程序和会话级别的事件,例如:

Application_Init - 在应用程序首次初始化时触发

Application_Start - 应用程序首次启动时触发

Application_End - 应用程序结束或超时时触发的最终事件

Session_Start - 用户会话第一次启动时触发

Application_BeginRequest - 随每个新请求触发

Application_EndRequest - 应用程序结束时触发

Application_AuthenticateRequest - 该事件指示请求已准备好进行身份验证。

Application_Error - 当应用程序中发生未处理的错误时触发

Session_End - 当单个用户会话结束或超时时触发。

于 2017-08-09T04:02:29.793 回答
0

我能够使用 IIS 中的出站规则解决相同的问题。因此,您必须在 IIS 中的 URL 重写模块中创建出站规则来修改位置标头。您必须检查 302 状态标头作为条件,并为 Location 标头提供匹配 URL 和操作 URL。以下是参考文章中的步骤。

使用 IIS URL 重写修改位置标头

  1. 转到您网站的 URL 重写功能,然后单击添加规则...</li>
  2. 从前提条件下拉列表中选择。
  3. 在出现的对话框中单击添加
  4. 在条件输入字段中输入 {RESPONSE_STATUS},在模式字段中输入 3[0-9][0-9]。
  5. 单击确定。
  6. 从匹配范围下拉列表中选择服务器变量。
  7. 输入 RESPONSE_Location 作为变量名称。
  8. 在 Pattern 字段中输入一个正则表达式以匹配您的后端系统正在生成的 URL(例如http://local/page
  9. 在操作值框中输入正确的 URL(例如http://example.com/page
  10. 单击应用,您就完成了!

参考:使用 IIS 7 URL 重写处理 301 和 302 重定向

于 2017-09-01T09:54:50.910 回答