【问题标题】:AuthenticationForm - Cross Site CookiesAuthenticationForm - 跨站点 Cookie
【发布时间】:2012-09-03 18:52:18
【问题描述】:

我有 2 个网站,第一个是 myFirst.domain.com,第二个是 mySecondSite.domain.com

它们位于两个不同的网络服务器上,我的目标是允许跨站点身份验证(我真正需要的是共享 FormsAuthentication Cookie)。

我已经正确设置了我的web.config 文件(机器密钥节点、表单节点)。唯一的区别是 loginUrl 在 myFirstSite 上显示为 ~/login.aspx,而在 mySecondSite 上显示为 http://myFirstSite.com/login.aspx

请注意,我没有虚拟目录,我只有 2 个不同的网络应用程序。

问题:当我从 mySecondSite 到达 myFirstSite 登录页面时,我从未从登录页面重定向,似乎没有写入 cookie。

以下是关于这个问题的一些sn-ps:

MyFirsSite:

 <machineKey validationKey="..." decryptionKey="..." validation="SHA1" decryption="AES" />
        <authentication mode="Forms">
            <forms loginUrl="login.aspx" name="authCookie" enableCrossAppRedirects="true"></forms>
        </authentication>
        <authorization>
            <deny users="?" />
            <allow users="*"/>
        </authorization>

MyFirstSite 后面的代码:

 FormsAuthenticationTicket fat = new FormsAuthenticationTicket(1, "userName..", DateTime.Now, DateTime.Now.AddMinutes(30), true, "roles..");

        string ticket = FormsAuthentication.Encrypt(fat);

        HttpCookie authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, ticket);
        authCookie.Expires = fat.Expiration;
        authCookie.Domain = "myDomain.com";
        Response.Cookies.Add(authCookie);

//Here is other stuff about querystring checking in order to execute exact redirect, however it's not working, I always return to the login page.

MySecondSite:

<machineKey validationKey="..." decryptionKey="..." validation="SHA1" decryption="AES"/>
        <authentication mode="Forms">
            <forms loginUrl="http://myFirstSite.domain.com/login.aspx?queryStringToIndicateUrlPage" enableCrossAppRedirects="true"></forms>
        </authentication>
        <authorization>

嗯,就是这样。不幸的是,它不起作用。

请不要关注queryStringToIndicateUrlPage,这只是一个简单的解决方法,以便知道我是否必须在同一个应用程序或另一个应用程序上重定向。

【问题讨论】:

    标签: asp.net forms-authentication httpcookie


    【解决方案1】:

    当您使用在两个域之间共享的基于 cookie 的身份验证时,您需要在 &lt;forms&gt; 元素中指出这一点:

    <machineKey validationKey="..." decryptionKey="..." validation="SHA1" decryption="AES"/>
        <authentication mode="Forms">
            <forms domain=".domain.com" ... />
        </authentication>
    

    注意开头的“.”在域名前面,这样可以在子域之间共享 cookie。

    【讨论】:

    • 我已经尝试过指定域名,但还是不行。
    • @bit:您的示例代码使用 authCookie.Domain = "myDomain.com",它应该是 ".myDomain.com"。你试过了吗?
    • 是的,我做到了。我也尝试了许多其他解决方案,但没有运气。似乎不可能实现。
    • 重要提示:在我的示例中,我说 myFirstSite.myDomain.com 和 mySecondSite.MyDomain.com 是为了表示重要性。实际上,地址是 myFirstSite.xxx.yyy.com 和 mySecondSite.xxx.yyy.com,所以我的 cookie 域字符串将是“.xxx.yyy.com”。我已经读到超过 2 个点可能是导致问题的原因。有可能吗?
    • @bit:如果我是你,我首先要检查的是 cookie 是否真的粘住了。忘记之后的身份验证,你能看到cookies设置正确吗?使用网络跟踪器查看 Set-Cookie 和 Cookie 标头(IE 已内置,您可以在 Firefox 下使用 Firebug)。
    猜你喜欢
    • 1970-01-01
    • 2016-08-20
    • 2020-02-21
    • 2021-01-01
    • 2023-03-11
    • 1970-01-01
    • 2021-06-10
    • 2011-01-01
    • 2021-05-08
    相关资源
    最近更新 更多