我正在尝试使用适用于我的顶级域名和版本的表单身份验证。子域名。
例如,如果我使用此域名登录: mydomain.com ,然后转到 www.mydomain.com 我希望能够识别用户谁登录 mydomain.com (它是相同的应用程序)。
我在 web.config 文件中使用以下内容:
<authentication mode="Forms">
<forms loginUrl="~/Account/LogOn" domain="mydomain.com" timeout="2880" />
</authentication>
这是 mvc 项目,我使用以下 API 获取用户ID:
HttpContext.Current.User.Identity.Name
表单身份验证cookie的创建是在对用户执行openid登录后由以下api完成的:
FormsAuthentication.SetAuthCookie(userName, createPersistentCookie);
我可以看到身份验证Cookie正在发送到这两个域,但只有进行身份验证的域才能识别用户。
我做错了吗?
谢谢, Lior
答案 0 :(得分:3)
确保您为这两个应用程序设置了相同的machine keys。如果使用应用程序1的机器密钥加密身份验证令牌,并且应用程序2具有不同的密钥,则无法对其进行解密。
答案 1 :(得分:1)
This question与您的不完全相同,但它看起来像是您寻找的解决方案。
答案 2 :(得分:1)
您需要在顶级域中发出票证,才能被子域识别。这是因为cookie的工作原理:
如果您在domain.com中设置了Cookie,则会在sub.domain.com上显示 但是,如果您在sub.domain.com上设置它,它将不会在domain.com上显示
这是一个安全问题,因为Cookie而且您必须考虑它,超出了<form>
元素的设置,这些设置与验证/拒绝身份验证Cookie有关,您需要{ {1}},你已经做过了。
除此之外,如果在子域上有不同的应用程序,则需要明确定义机器密钥是否相同。您可以在此处为自己生成一些密钥:http://aspnetresources.com/tools/machineKey