首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Asp.net窗体身份验证和多个域

Asp.net窗体身份验证和多个域
EN

Stack Overflow用户
提问于 2010-01-13 20:51:03
回答 3查看 36K关注 0票数 25

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

这是我用来登录的代码:

代码语言:javascript
运行
复制
FormsAuthentication.RedirectFromLoginPage(username, cookie.Checked);

要检查登录,请执行以下操作:

代码语言:javascript
运行
复制
User.Identity.IsAuthenticated

如何才能使用户在所有指向同一网站的域中都能通过身份验证?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-01-13 21:03:09

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

由于ASP.NET身份验证的核心通常是基于cookie的,因此有两件事需要注意:

在注册过程中,

  1. 将您的cookies correctly.
  2. Bounce您的用户设置到备用域。

更深入地研究这两个问题:

1.正确设置cookies

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

代码语言:javascript
运行
复制
<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,以便您可以将他们发送回正确的位置。

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

票数 45
EN

Stack Overflow用户

发布于 2010-01-13 20:59:33

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

票数 3
EN

Stack Overflow用户

发布于 2010-01-13 20:58:15

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

票数 -4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2056686

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档