我正在尝试在主 IIS 7 站点 (local.mysite.com) 和它下面的 VirtualDirectory (local.mysite.com/vdir) 之间实现 SSO。
我已将两个 web.configs 设置为使用相同的 MachineKey 设置和身份验证部分:
<authentication mode="Forms">
<forms name="myCookie" loginUrl="login.aspx" protection="All" path="/" enableCrossAppRedirects="true" domain=".mysite.com"/>
</authentication>
<machineKey validationKey="123" decryptionKey="456" validation="SHA1" decryption="AES"/>
我目前在主站点上有登录工作。我正在使用类似于以下的代码创建自己的身份验证 cookie:
var ticket = new FormsAuthenticationTicket(1, state.Email, DateTime.Now, expiresDate, true, state.ToString());
string encryptedTicket = FormsAuthentication.Encrypt(ticket);
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket) { Domain = FormsAuthentication.CookieDomain };
response.Cookies.Add(cookie);
但是,每当我在登录后点击虚拟目录时,用户都没有经过身份验证。使用 FireBug 我可以看到 cookie 是在请求中发送的,但我无法在后面的代码中访问它。但是,如果我从 VirtualDirectories web.config 中删除该条目,我可以在 Requests cookie 集合中看到“myCookie”cookie。
我不知道为什么会这样,有人可以解释一下吗?我对在 IIS 中使用 VirtualDirectories 不太熟悉,所以可能是我缺少的东西。