我有2个网站,第一个是myFirst.domain.com
,第二个是mySecondSite.domain.com
。
他们留在两个不同的Web服务器上,我的目标是允许跨站点身份验证(我的真正需求是共享FormsAuthentication
Cookie)。
我已正确设置web.config
文件(计算机密钥节点,表单节点)。唯一的区别是loginUrl在myFirstSite上显示为~/login.aspx
,而在mySecondSite上显示为http://myFirstSite.com/login.aspx
。
请注意,我没有虚拟目录,我只有2个不同的网络应用程序。
问题:当我从mySecondSite访问myFirstSite登录页面时,我从未从登录页面重定向,似乎没有写入cookie。
以下是有关该问题的几个片段:
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
,这只是一个简单的解决方法,以便了解我是否必须重定向到同一个应用或另一个应用。
答案 0 :(得分:0)
当您在两个域之间共享基于cookie的身份验证时,您需要在<forms>
元素中指明:
<machineKey validationKey="..." decryptionKey="..." validation="SHA1" decryption="AES"/>
<authentication mode="Forms">
<forms domain=".domain.com" ... />
</authentication>
注意最初的“。”在域名前面,可以在子域之间共享cookie。