2011-04-23 135 views
2

我正在尝试使用表单身份验证,这将同时适用于我的顶级域名&子域。表单身份验证和子域名

举例来说,如果我有这个域名登录:mydomain.com事后要www.mydomain.com我想有确定谁登录到用户的能力mydomain.com (这是同一个应用程序)。

我使用我的的web.config以下文件:

<authentication mode="Forms"> 
    <forms loginUrl="~/Account/LogOn" domain="mydomain.com" timeout="2880" /> 
</authentication> 

这是一个MVC项目,我得到的用户ID与下面API

HttpContext.Current.User.Identity.Name 

在执行openid登录到用户后,通过以下api完成表单身份验证Cookie的创建:

FormsAuthentication.SetAuthCookie(userName, createPersistentCookie); 

我可以看到身份验证Cookie正在发送到两个域,但只有身份验证的域才能识别用户。

我做错了什么?

感谢, 利奥尔

+0

[跨子域的表单身份验证]的可能重复(http://stackoverflow.com/questions/608120/forms-authentication-across-sub-domains) – rcdmk 2014-09-22 16:32:16

回答

3

确保您对这两个应用程序具有相同的machine keys设置。如果身份验证令牌使用应用程序1的机器密钥加密,并且应用程序2具有不同的密钥,则它将无法对其解密。

1

您需要在顶层域中发布您的票证才能被子域识别。这是因为Cookie的工作原理:

如果您在domain.com中设置cookie,它将在sub.domain.com上可见 但是,如果您在sub.domain.com上设置它,它将不可见domain.com

由于Cookie,这是一个安全问题,除了验证/拒绝身份验证Cookie的<form>元素设置之外,您必须考虑它,您需要拥有domain='domain.com' ,你已经做了。

除此之外,如果在子域上有不同的应用程序,则需要明确定义机器密钥才是相同的。你可以在这里生成你自己的一些密钥:http://aspnetresources.com/tools/machineKey