我有两个ASP.NET站点(它们不能在同一个进程中运行),我需要在它们之间共享身份验证。如果用户在站点A中已经过身份验证,然后转到站点B,我需要有一种方法与站点B共享此信息,因此不会要求用户再次进行身份验证。两种方式都是如此。你如何分享这些信息?
答案 0 :(得分:4)
他们是否在同一个域中?
如果你有app1.blah.com和app2.blah.com,这很容易做到。只需在web.config中的forms-section中将域名和名称设置为相同的值:
<authentication mode="Forms">
<forms loginUrl="login.aspx"
name=".COOKIENAME"
protection="All"
path="/"
domain="blah.com"
timeout="30" />
</authentication>
另一个好处是,用户可以登录任一站点,如果他们转到另一个站点,仍然会进行身份验证。
答案 1 :(得分:2)
选择一个站点作为处理所有登录的“主站点”。我们将称之为一个站点A和非登录站点B.
当用户在A上使用登录表单时,它应该设置一个带有一些唯一标识符的cookie,例如GUID。只要该cookie有效,用户就应该保持登录状态。
当用户访问站点B时,站点B应设置具有其自己的唯一标识符(另一个GUID)的cookie,然后重定向到站点A上的登录名,并传递查询字符串中的唯一ID:Response.Redirect("http://siteA.com/login.aspx?id=ABCDEF")
当用户登录A上的表单时,我们应该更新站点B的数据库 - 可能是通过Web服务 - 使用用户ID和传递的唯一ID - 基本上让站点B知道“当用户使用ABCDEF时在他们的cookie中点击你的网站,它实际上是User387“。
然后重定向回到站点B.前面的cookie仍然设置,但站点B现在读取该cookie并找到相应的用户ID,因此它知道用户是谁并允许访问。
当用户到达网站A时,如果他们之前已经登录过网站A,则会识别他们的Cookie,按照上述步骤操作,然后立即重定向。
这是每个单点登录服务的简单版本。无论用户从哪里开始(网站A或网站B),用户都只会被发送到A的登录页面。
答案 2 :(得分:2)
如果您使用的是表单身份验证,则可以通过设置计算机密钥来执行此操作。
答案 3 :(得分:0)
查看Windows Communication Authentication Service。不会像你想要的那样完全处理单点登录,但它至少应该让人们使用相同的凭据登录。