1

好的,问题来了:

我有两个站点:www.mysite.com 和 blog.mysite.com(假站点名称),它们假设共享身份验证。登录页面位于 www.mysite.com/login/login.aspx

现在,博客网站的 web.config 具有以下身份验证部分:

<authentication mode="Forms">
  <forms timeout="50000000" 
   loginUrl="http://www.mysite.com/login/login.aspx"
   defaultUrl="~/"/>
</authentication>
<authorization>
   <deny users="?"/>
</authorization>

现在我点击blog.mysite.com/andrey/page.aspx它,它会将我重定向到www现场的登录页面。真正的问题是“reditect”查询字符串将只包含相对页面 url ( andrey/page.aspx),所以当我登录时,它会尝试将我重定向到www.mysite.com/andrey/page.aspx,而不是blog.mysite.com/andrey/page.aspx我开始的地方,所以当然一​​切都失败了。

有没有办法告诉 Membership 对象在弹回登录页面时将完整路径放入“重定向”查询字符串参数中?

谢谢!安德烈

4

1 回答 1

1

假设每个域都有自己的 web.config,我认为这可能有效。

1) 为 www.mysite.com 和 blog.mysite.com 创建一个登录页面
2) 指向同一个会员数据库
3) 确保两者都具有相同的会员 applicationName 属性集:

<membership><providers><add applicationName="mySite">

4)确保两者都具有相同的表单名称集:

<authentication mode="Forms"><forms  name="mySite">

这应该确保两个站点使用相同的成员数据库和相同的身份验证 cookie,但它们将使用各自的登录页面,因此返回 url 应该没问题。


能否调用FormsAuthentication.SetAuthCookie 方法并手动重定向到 http referrer?


我刚刚在FormsAuthentication.RedirectFromLoginPage的文档中看到了这一点

默认情况下,ReturnUrl 变量必须引用当前应用程序中的页面。如果 ReturnUrl 引用不同应用程序或不同服务器上的页面,则 RedirectFromLoginPage 方法将重定向到 DefaultUrl 属性中的 URL。如果要允许重定向到当前应用程序之外的页面,则必须使用表单配置元素的 enableCrossAppRedirects 属性将 EnableCrossAppRedirects 属性设置为 true。安全说明Security Note:

将 EnableCrossAppRedirects 属性设置为 true 以允许跨应用程序重定向是潜在的安全威胁。当允许跨应用程序重定向时,您的站点很容易受到恶意网站的攻击,这些网站使用您的登录页面让您的网站用户相信他们正在使用您网站上的安全页面。为了提高使用跨应用程序重定向时的安全性,您应该重写 RedirectFromLoginPage 方法以仅允许重定向到已批准的网站。

弄乱该属性是否有帮助?

于 2009-09-16T21:58:53.283 回答