【问题标题】:ASP.NET OAuth having issues with URL RewriteASP.NET OAuth 遇到 URL 重写问题
【发布时间】:2014-06-13 14:03:46
【问题描述】:

我的生产设置如下:

  • 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/[query-string]

所以要明确一点;当请求通过外部身份验证提供程序进行身份验证时,将返回 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 的规则。它也只能针对某些重定向。大多数时候,这里提到的行为都是需要的,因为所有重定向都被重定向到主代理服务器。有人可以为某些重定向提出解决方案或解决方法吗?

【问题讨论】:

  • 你有没有想出解决方案,如果你这样做了,现在是回答的好时机,我遇到了完全相同的问题。
  • 让我们来回答这个傻瓜!!!!!!!
  • 我们需要重写规则来检查哪里出了问题。

标签: asp.net oauth url-rewrite-module arr


【解决方案1】:

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

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

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

我认为这个设置也适用于每个站点,但我对 web.config 文件的代理设置尝试没有证实这一点。

【讨论】:

  • 这是正确答案。我的设置是:Jenkins + IIS 反向代理 + GitHub Auth
【解决方案2】:

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

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

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

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

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

Application_BeginRequest - 随每个新请求触发

Application_EndRequest - 应用程序结束时触发

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

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

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

【讨论】:

    【解决方案3】:

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

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

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

    参考:Handling 301 and 302 redirects with IIS 7 URL Rewrite

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-04
      • 1970-01-01
      • 2011-11-11
      • 2011-03-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多