none
Form身份验证跨二级域名验证的问题

    问题

  • 你好,我有两个网站,一个域名是a.test.com,一个是b.test.com,我需要两个网站之间实现验证cookie共享。我配置了web.config,设定了验证时cookied的域名

    <authentication mode="Forms">
          <forms loginUrl="Login.aspx" domain="test.com" defaultUrl="Default.aspx" timeout="1200" slidingExpiration="true" name=".ASPXAUTH"/>
        </authentication>

    同时也设置了

    <machineKey validationKey="C9E0C488F13456667414E4557320C91A11A1AD6F9506448D4BE574DF075DDEF6D1D430C51554CD25687FC8170A633E00FD64C3E93FAF04A613922EE08BF844A8" decryptionKey="2BC92C6FC0B5587CB77F793AF3DEDBE99242CDE0201589CC" validation="SHA1"/>

    两个网站不在同一个服务器上,a.test.com通过验证生成了.ASPXAUTH的cookie,且domain值是.test.com,访问b.test.com时,从fiddler中可以看到向b.test.com发送了.ASPXAUTH的cookie。但是在b.test.com通过request.cookies查看时,没有.ASPXAUTH的cookie。

    为了测试该问题,我在a.test.com生成了一个其他名字的cookie,设置了domain为.test.com,却发现该cookie能够在b.test.com得到。

    ttpCookie testcookie = new HttpCookie("test");
                testcookie.Value = "test";
                testcookie.Domain = ".overmcse.com";
                Response.Cookies.Add(testcookie);

    请问这是怎么回事?


    ...

    2016年5月20日 4:20

答案

  • 我发现了,ASPXAUTH此类COOKIE是不会包含在request.cookie中。而是要通过FormsAuthentication.GetAuthCookie的方式来获得。

    var cookie = FormsAuthentication.GetAuthCookie(".ASPXAUTH", false);
    var ticket = FormsAuthentication.Decrypt(cookie.Value);

    但是,无法解密...虽然他们配置了相同的machineKey


    ...

    2016年5月31日 8:47

全部回复