【问题标题】:Cross-site authentication options on separate domains不同域上的跨站点身份验证选项
【发布时间】:2011-02-11 03:12:46
【问题描述】:

我们正在考虑为需要从其他网站进行身份验证的临时网站使用身份验证系统。在这里总结一下,我们在完全不同的域上有两个站点。 foo.com 是始终存在(并且已经存在)的主要站点。这是用户进入并登录该站点的主要位置,并在那里以登录状态进行操作。该站点将很快得到修改,以提供指向 bar.com 的链接。当登录 foo.com 的用户单击指向 bar.com 的链接时,他们需要神奇地登录到 bar.com。 (我知道这听起来像是一场安全噩梦,但 bar.com 只是一个临时站点,用于 foo.com 上的人们将使用一两天的短暂窗口)。我们不允许在 bar.com 上登录,这一切都必须在 foo.com 上进行。我们试图在这里找出解决方案,如果有任何好的解决方案,我们还想要更多。他是我们的:

  1. 在bar.com上,检查referrer,如果是foo.com,让用户登录。这是非常不安全的,很容易被欺骗。我们知道。

  2. 登录 foo.com 后,bar.com 的链接有一个特殊的加密查询字符串,表示用户在 foo.com 上的会话。当单击 bar.com 的链接时,让 bar.com 获取该查询字符串并使用 Web 服务将其传递回 foo.com,无论这是否是合法会话,foo.com 都会对此做出响应。这比上面的 1 更安全,因为查询字符串会话信息是加密的,并且 Web 服务调用确保它是合法的会话。

这里还有其他选择吗?让我重申一下,我们想要一个比上述 1 更安全的好解决方案,但这是一个只有某些人才能访问的临时站点。我们知道这听起来像是一个奇怪的安排,但它适用于一个非常特定的站点,对于特定目的来说生命周期很短。根据要求,我们需要用户仅登录原始站点。在此先感谢您提供任何提示或指示。

【问题讨论】:

    标签: asp.net authentication login single-sign-on


    【解决方案1】:

    我敢说选项 2 是你最好的选择,因为:

    1. foo.com 保存原始会话信息
    2. foo.com 为经过身份验证的调用公开了一项安全服务,可以从 bar.com 进行验证以进行验证
    3. bar.com 被传递了一个包含某种形式的身份验证令牌的令牌
    4. 然后使用仅对 foo.com 和 bar.com 之间的连接有效的预定凭据将令牌传递给对 foo.com 的安全回调

    跨域 SSO(单点登录)的良好示例:Part 1 & Part 2

    【讨论】:

      【解决方案2】:

      我认为第二个选项是一个很好的解决方案,您甚至可以不使用 Web 服务:使 bar.com 的链接包含包含用户名(或用户所需的任何上下文)的查询参数、随机数(例如一个随机数)和一个由用户名、用户的 IP 地址和随机数串联而成的验证码(例如 HMAC 或数字签名)。然后,两台服务器之间不需要通信,只需要预先共享验证数据(HMAC密钥/签名验证公钥),就可以直接在第二台服务器上验证信息(记下曾经使用过的)防止重放攻击的随机数,但我猜在你的场景中它们可能不是一个大问题)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-12-24
        • 2012-06-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-07
        • 1970-01-01
        相关资源
        最近更新 更多