IE保护模式下asp.net应用程序中跨域登录(身份验证共享)的问题

时间:2010-11-17 12:30:56

标签: asp.net login forms-authentication single-sign-on

我有一个在两个不同子域下运行的网站,我们称之为

foo.mydomain.com 和 的 bar.mydomain.com

我想让用户在这两个域之间共享他们的登录会话。 这就是我在web.xml中设置它的原因

<authentication mode="Forms">
            <forms timeout="50000000" loginUrl="~/Login/Login.aspx?redirect=true" domain="mydomain.com"/>
        </authentication>

基本上这很好用,但有例外:带保护模式的IE。在这种情况下,注销不再起作用。 保护模式关闭后一切正常。

IIS 7 / ASP.NET 3.5

2 个答案:

答案 0 :(得分:0)

我想我自己找到了答案,问题如下:

在我设置域属性之前登录的用户有一个cookie .ASPXAUTH用于域

www.mydomain.com

现在,当用户带来这个cookie时,asp.net没有认出他已登录,但登录后他有两个.ASPXAUTH cookie设置,一个用于www.mydomain.com,另一个用于(新的) .mydomain.com来。这可能会混淆ASP.NET,并且用户无法正确登录。

我的解决方案是手动删除旧cookie。因为这个cookie只设置为http,所以使用JavaScript是不可能的,但我通过发送一个过时的(设置过期日期到昨天)cookie来管理它,该cookie具有相同的名称.ASPXAUTH和与旧cookie相同的域。后者我只是将域属性留空(然后cookie自动接收当前域名www.mydomain.com)

有点冗长的故事,但这看起来很漂亮。

答案 1 :(得分:0)

有趣的是,如果你有多个.ASPXAUTH cookie(在相同的域上),你将无法在Request.Cookies中看到它们,但是框架以某种方式知道cookie,并且将使用它找到的第一个 - 所以顺序也很重要。关于覆盖cookie的解决方案只有在cookie过期时才有效 - 这是我的经验。