相关疑难解决方法(0)

跨域登录 - 如何在从一个域转移到另一个域时自动登录用户

我们提供多种在线服务.如果用户从一个服务(on domain1.com)转移到另一个服务(on domain2.com),我们需要开发一个为用户提供快速/简单体验的系统.

一旦他转移到新服务后,是否有一种安全可靠的方式自动登录用户?

如果下面的解决方案完全不安全/错误,请对我大喊大叫.

我们正在考虑一个类似于许多在线服务提供的用于密码恢复的系统 - 它们通过电子邮件发送一个带有唯一哈希的链接,该链接过期,允许他们更改密码.

domain1.com会生成一个唯一的哈希值,并将其存储在连接到用户以及一个到期时间字段的哈希数据库.

用户将被转移到 domain2.com/auto/?hash=d41d8cd98f00b204e9800998ecf8427e

domain2.com接下来将domain1.com使用散列请求获取有关用户的信息.domain1.com然后将从数据库中删除哈希.domain2.com会记录用户并设置cookie等

可以基于OpenID或OAuth获得相同的结果吗?

security authentication dns single-sign-on

50
推荐指数
4
解决办法
4万
查看次数

多个站点的透明用户会话(单点登录+单点登录)

我在不同领域的几个网站:example.com,example.org,mail.example.compassport.example.org.所有网站都具有共同的外观,应该共享相同的用户群.

在这种极端情况下,我仍然希望所有站点透明地(尽可能地)共享具有以下关键属性的用户会话:

  1. 单点登录.当用户passport.example.org登录并访问任何其他站点时 - 他应该被视为已登录.

    登录用户$username在站点标题和不同的导航菜单中获得"Hello ",问候语,列出他们有权访问的服务.如果他没有登录,而不是打招呼有一个"登录"链接,指向passport.example.org/signon.

    可信域列表是已知的,因此使用OpenID或某些homebrewn轻量级协议实现起来相当简单.当用户第一次访问该站点时,我将其重定向到特殊身份验证端点passport.example.org,然后以静默方式将其重定向回来,其中包含身份信息(或"未签名"匿名身份).对于大多数浏览器,这是完全透明的 显然,我正在使用nonce值来对抗重定向循环.

  2. 单一签收.当用户下次访问任何网站时点击任何网站标题中的"注销"时,他应被视为"未登录".

    OpenID不是为此而设计的.我当前的想法(我已经有一个部分工作的实现)是在DB中发送不是用户身份,而是"全局"会话令牌和共享全局会话表(global_session_token↔用户关系).

  3. 机器人和无cookie用户支持.站点具有公共区域,用户代理可以访问这些区域而无需任何cookie支持.

    因此,我在(1)中提到的重定向成为一个问题,因为对于每个单页请求,我最终都会将用户代理抛给auth端点并返回.这不仅会使机器人感到困惑,而且会很快污染我的会话数据库.我绝对不想显示"嘿,你没有启用cookie,走开!"页面,这是非常粗鲁和令人失望的.虽然我需要cookie支持登录,但我希望用户可以自由阅读网站的内容等等 - 没有任何限制.

    而且我明确地希望把URL中的会话ID,除了我刚才提到了一些透明的跨域重定向.我认为这样做是一个安全问题,通常只是一件坏事.

    在这里,我几乎没有想法.

好吧,我知道这很难,但谷歌实际上(这是否在某种程度上google.com, google.很多-的-通用顶级域名,gmail.com等等),对不对?所以这应该是可能的.

我要感谢协议描述的想法(这是最好的)或系统的链接(要么是代码阅读,要么是直播现场观看和学习)已经成功地实现了这样的事情.

总结一下:几个域没有共同的根,共享用户群,单点登录,单点注销,匿名浏览不需要cookie.

所有站点都在同一个网络上(但在不同的服务器上)并且部分共享同一个PostgreSQL数据库(在同一个数据库的不同方案中).大多数站点都是用Python/Django编写的,但其中一些是使用PHP和Ruby on Rails.虽然我正在考虑与框架和语言无关的东西,但我很感激指向任何实现.即使我不能使用它们,如果我能理解它是如何完成的,那么也许我能够实现类似的东西.

authentication session single-sign-on

35
推荐指数
2
解决办法
2万
查看次数

标签 统计

authentication ×2

single-sign-on ×2

dns ×1

security ×1

session ×1