我有两个域,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. 正确设置cookie
您需要确保 ASP.NET 将身份验证票证 cookie 写入根域,而不是显式域,这是使用domain
forms 元素的属性:
<forms
name="name"
loginUrl="URL"
defaultUrl="URL"
domain=".example.com">
</forms>
您应该将您的域名设置为“.example.com” - 请注意前导句点 - 这是关键。这样,对 example.com 和 www.example.com 的请求都将正确读取 cookie,并对用户进行身份验证。
2. 将用户退回到备用域
我们在一些使用单点登录的网站上实施的是往返登录过程。用户在第一个域上进行身份验证,我们加密登录详细信息,并将其重定向到第二个域上的已知页面,在那里登录,然后重定向回原始服务器。
这种客户端重定向很重要 - 仅当有响应返回客户端时才会写入 cookie,并且浏览器必须访问第二个域才能实际看到 cookie。
此类设置中需要考虑的其他细节:
- 您可能希望加密的登录详细信息超时 - 以便从浏览器历史记录中调用该 URL 不会自动使用户登录。
- 如果域位于不同的服务器上,您将需要确保计算机密钥配置相同,以便您可以正确加密和解密详细信息,或者使用其他共享密钥。
- 您可能希望有一种机制来从原始服务器调用用户 ReturnUrl,以便您可以将它们发送回正确的位置。
您还可以看一下“跨应用程序的表单身份验证”
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)