表格认证&子域

时间:2011-04-23 12:46:18

标签: asp.net-mvc forms authentication subdomain

我正在尝试使用适用于我的顶级域名和版本的表单身份验证。子域名。

例如,如果我使用此域名登录: 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

3 个答案:

答案 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