ASP.NET OAuth存在URL重写问题

时间:2014-06-13 14:03:47

标签: 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,正在被网址重写替换为 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。它也只能针对某些重定向。大多数情况下,这里提到的行为是必需的,因为所有重定向都被重定向到主代理服务器。有人可以为某些重定向建议解决方案或解决方法吗?

3 个答案:

答案 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重写修改位置标头

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