使用成员资格处理asp.net中的身份验证

时间:2009-09-16 21:33:42

标签: asp.net authentication sqlmembershipprovider

好的,问题在于:

我有两个站点: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”查询字符串只包含相对页面网址(andrey/page.aspx),所以当我登录时会尝试将我重定向到www.mysite.com/andrey/page.aspx,而不是blog.mysite.com/andrey/page.aspx我开始所以当然一​​切都失败了。

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

谢谢! 安德烈

1 个答案:

答案 0 :(得分: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 Method并手动重定向到http推荐人吗?


我刚在FormsAuthentication.RedirectFromLoginPage

的文档中看到了这一点
  

默认情况下,ReturnUrl变量   必须引用内的页面   目前的申请。如果ReturnUrl   指的是不同的页面   应用程序或在不同的服务器上,   RedirectFromLoginPage方法   重定向到中的URL   DefaultUrl属性。如果你想   允许重定向到页面外的页面   当前的应用程序,你必须设置   EnableCrossAppRedirects属性   使用enableCrossAppRedirects时为true   表单配置的属性   元件。安全说明安全注意:

     

设置EnableCrossAppRedirects   属性为true允许   跨应用程序重定向是一个   潜在的安全威胁。什么时候   跨应用程序重定向是   允许,您的网站容易受到攻击   使用您的恶意网站   登录页面以说服您的网站   他们使用安全的用户   您网站上的页面。为了提高安全性   使用跨应用程序时   重定向,你应该重写   RedirectFromLoginPage方法允许   仅重定向到已批准的网站。

搞乱那个属性有帮助吗?