Asp.net形成身份验证和多个域

时间:2010-01-13 12:51:03

标签: asp.net forms-authentication

我有两个域名,domain1.com和domain2.com指向同一个asp.net网站,该网站在表单身份验证中使用asp.net build。问题是,即使域指向同一网站,用户也只能一次对一个域进行身份验证。因此,如果他首先使用www.domain1.com然后访问www.domain2.com,那么后面的网站就是同一个网站,但他只对www.domain1.com进行了身份验证。如果他在访问网站时使用www而不是www,也会发生同样的事情。

这是我用来登录的:

FormsAuthentication.RedirectFromLoginPage(username, cookie.Checked);

要检查登录信息:

User.Identity.IsAuthenticated

如何让用户针对指向同一网站的所有域进行身份验证?

3 个答案:

答案 0 :(得分:44)

您所追求的是单点登录解决方案。

由于ASP.NET身份验证通常基于cookie,因此有两点需要注意:

  1. 正确设置Cookie。
  2. 在注册期间将您的用户退回到备用域。
  3. 更深入地研究这两个方面:

    <强> 1。正确设置Cookie

    您需要确保ASP.NET将身份验证票证cookie写入根域,而不是使用表单元素的domain属性完成显式域:

    <forms 
       name="name" 
       loginUrl="URL" 
       defaultUrl="URL"
       domain=".example.com">
    </forms>
    

    您应该将域名设置为“.example.com” - 请注意领先时段 - 这是关键。这样,对example.com和www.example.com的请求将正确读取cookie,并对用户进行身份验证。

    <强> 2。将用户退回到备用域

    我们在一些使用单点登录的网站上实施的是往返登录流程。用户在第一个域上进行身份验证,我们对登录详细信息进行加密,并将其重定向到第二个域上的已知页面,将其登录到那里,然后重定向回原始服务器。

    此客户端重定向很重要 - 只有在客户端有响应时才会写入cookie,浏览器必须访问第二个域才能真正看到cookie。

    在此类设置中需要考虑的其他细节:

    1. 您可能希望加密登录详细信息超时 - 以便从浏览器历史记录中调用该URL不会自动将用户登录。
    2. 如果域位于不同的服务器上,则需要确保机器密钥配置相同,以便您可以正确加密和解​​密详细信息,或使用其他共享密钥。
    3. 您可能希望有一个机制来从原始服务器调用用户ReturnUrl,以便您可以将它们发送回正确的位置。
    4. 您还可以查看"Forms Authentication Across Applications"

答案 1 :(得分:3)

您可以尝试设置cookieless="true"

答案 2 :(得分:-4)

您应该在MSDN上阅读Explained: Forms Authentication。它们涵盖了跨域身份验证。