Authentication 多个站点上的透明用户会话(单点登录和单点注销)
我在不同的领域有几个网站:Authentication 多个站点上的透明用户会话(单点登录和单点注销),authentication,session,single-sign-on,Authentication,Session,Single Sign On,我在不同的领域有几个网站:example.com,example.org,mail.example.com 和passport.example.org。所有的网站都有共同的外观和感觉 应该共享相同的用户群 在这种极端情况下,我仍然希望所有的网站都透明(尽可能多) 使用以下关键属性共享用户会话: 单点登录。当用户登录到passport.example.org并访问 任何其他站点-他应被视为已登录 登录的用户在站点标题中获得“Hello,$username”问候语,并且不同 导航菜单,列出他们可以访
example.com
,example.org
,mail.example.com
和passport.example.org
。所有的网站都有共同的外观和感觉
应该共享相同的用户群
在这种极端情况下,我仍然希望所有的网站都透明(尽可能多)
使用以下关键属性共享用户会话:
passport.example.org
并访问
任何其他站点-他应被视为已登录
登录的用户在站点标题中获得“Hello,$username
”问候语,并且不同
导航菜单,列出他们可以访问的服务。如果他没有登录,则改为
在问候语中有一个“登录”链接,指向passport.example.org/Sign
受信任域的列表是已知的,因此实现起来相当简单
使用OpenID或homebrewn轻量级协议。当用户第一次点击
网站,我将他重定向到位于passport.example.org
的特殊身份验证端点,
然后用身份信息(或“未登录”)悄悄地将他重定向回
匿名身份)包括在内。对于大多数浏览器来说,这是完全透明的。
显然,我使用nonce值来对抗重定向循环Google.com
)来做到这一点的,
google.
很多gtld,gmail.com
等等),对吗?所以这应该是
可能
我会很感激协议描述的想法(这是最好的)或链接
到系统(可以是代码阅读,也可以是实时站点观看和学习)
成功地实现了这样的东西
总而言之:几个域没有公共根、共享用户群、单点登录、单点注销,匿名浏览不需要cookie
所有站点都位于同一个网络上(但位于不同的服务器上),并且部分位于服务器上
共享同一个PostgreSQL数据库(位于同一数据库的不同方案中)。
大多数网站都是用Python/Django编写的,但其中一些网站使用的是PHP和Ruby on Rails。当我想到一些与框架和语言无关的东西时,我很感激能指出任何实现。即使我不能使用它们,如果我知道如何在那里实现,也许我能够实现一些类似的东西r、 您正在使用ASP.NET吗?如果是这样,您可能需要查看一下该属性。好的,谷歌只是在“Google.com”中使用了一个cookie域。但谷歌也使用OpenID,它允许一个通用的登录机制。基本上,这是通过将你重定向到一个特殊的登录页面来实现的。这个登录页面会检测你是否登录,如果你没有登录,它会要求你登录。否则,它会直接将你重定向到下一个页面 因此,在您的情况下,用户会打开somepage.example.com,而此应用程序的会话没有登录ID。因此,它会将用户重定向到logon.example.biz,用户将在那里登录。此页面后面还会有一个会话,该会话会告诉用户已登录。(或者没有,在这种情况下,用户必须先登录。)然后它重定向用户somepage.example.com?sessionid=该sessionid将存储在somepage.example.com的会话中。然后该会话还将知道用户已登录,对于用户来说,它几乎是透明的
实际上,用户会被重定向两次。如果您的所有应用程序都在一个域上,那么这并不太困难,因为您可以使用域级别的cookie来处理会话控制。(无cookie会话管理很困难,但可以完成,但很困难。) 但是,您指出了example.com域上的一些站点,以及example.org域上的一些站点 在我的google Sign in和他们orkut.com的其他网站上玩一玩,看起来当你点击一个需要凭据的页面时,它会将你重定向到一个普通的站点进行帐户登录,然后再将你重定向回原始站点,可能会在URL中传递某种会话令牌。由此,orkut.com服务器可能会r直接与google.com服务器联系,以验证令牌并获取所需的任何其他用户信息 有关域级cookie的更多信息,请按要求提供 如果你