我的生产设置如下:
- 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 的规则。它也只能针对某些重定向。大多数时候,这里提到的行为都是需要的,因为所有重定向都被重定向到主代理服务器。有人可以为某些重定向提出解决方案或解决方法吗?