gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 10:37:44 26 4
gpt4 key购买 nike

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

这是我用来登录的:

FormsAuthentication.RedirectFromLoginPage(username, cookie.Checked);

要检查登录:
User.Identity.IsAuthenticated

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

最佳答案

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

由于 ASP.NET 身份验证的核心通常基于 cookie,因此需要注意以下两点:

  • 正确设置您的 cookie。
  • 在注册期间将您的用户退回到备用域。

  • 更深入地研究这两个:

    1、正确设置cookies

    您需要确保 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。

    在这种设置中需要考虑的其他细节:
  • 您可能希望对加密的登录详细信息设置超时 - 以便从浏览器历史记录中调用该 URL 不会自动登录用户。
  • 如果域位于不同的服务器上,您需要确保机器 key 配置相同,以便您可以正确加密和解​​密详细信息,或者使用其他共享 key 。
  • 您可能希望有一种机制来从原始服务器中调用用户 ReturnUrl,以便您可以将它们发送回正确的位置。

  • 你也可以看看 "Forms Authentication Across Applications"

    关于Asp.net 形式身份验证和多个域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2056686/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com