【问题标题】:Cross site session creation with Devise使用 Devise 创建跨站点会话
【发布时间】:2014-07-21 23:48:36
【问题描述】:

我正在开发一个项目,该项目使用会话来管理当前登录的用户,但略有不同,实际应用程序上没有登录表单。相反,另一个站点将提供一个按钮,该按钮应该登录用户并重定向到他们的个人资料页面。

例如,客户正在站点 A(第 3 方应用程序)上查看他们的个人资料。从他们在站点 A 上的个人资料中,他们单击一个按钮,该按钮应将他们登录到站点 B 并重定向到他们在站点 B 上的个人资料,即我正在构建的站点。

我不熟悉此类案件的安全问题。我最初的想法是,如果站点 A 通过 https 发布用户的电子邮件地址和密码,那么它应该就像他们在我的站点 B 上填写表单一样工作。

我在这里遗漏了哪些安全问题,或者这根本不起作用?

注意:第 3 方网站基本上不在我的掌控之中,我永远不会说服该团队设置任何类型的 OAuth 协议,或者至少会花费不可接受的时间。另外,至少在我的理解中,OAuth 是接受来自任意数量的第 3 方的请求的方法。除了 SiteA 之外,没有其他网站会尝试让人们登录。

【问题讨论】:

    标签: ruby-on-rails security session devise


    【解决方案1】:

    这听起来像是 OAuth 提供者的典型应用程序。

    在这里获得概述并掌握概念:http://en.wikipedia.org/wiki/Oauth

    Ruby 中已经存在 OAuth 提供程序,因此您不必自己做所有事情:例如https://github.com/songkick/oauth2-provider.

    但是如果你真的不想这样做,那么我会让其他服务器生成一个包含用户 ID(可以是用户名、电子邮件或数据库 ID)、随机令牌、当前时间戳,然后使用MessageVerifier 签名。然后,您可以在服务器上检查时间戳是否在某个范围内(几分钟)以及消息是否经过验证(自然使用相同的密钥)。如果是,则接受用户。

    如果其他站点使用 PHP,那么您可能需要在 PHP 中重新构建 generate 方法。在 Ruby here 中查找源代码。

    【讨论】:

    • 见我上面的评论。我知道 OAuth 是“正确”的解决方案,但我非常怀疑这种情况是否会发生。
    • 所以你基本上会在你自己的系统中重新实现 OAuth,这个过程需要很多时间,并且保证你会打开一些安全漏洞。告诉他们必须设置 OAuth...
    • 当他们说绝对不是时,那又如何呢?另外,我认为 OAuth 在这里有点过分了。 OAuth 是关于对想要访问您的应用程序的第 3 方站点进行身份验证。我不需要验证第 3 方,它始终是同一个站点。如果我只是向他们颁发了一个我需要对他们进行身份验证的令牌,有点像 API 令牌?
    • 你是关于 OAuth 的第 3 方应用程序......但如果你真的想不这样做,那么我会让另一台服务器生成一个包含用户 ID 的哈希(可以是用户名、电子邮件或数据库 id)、随机令牌、当前时间戳,然后使用 MessageVerifier 对其进行签名。然后,您可以在服务器上检查时间戳是否在某个范围内(几分钟)以及消息是否经过验证(自然使用相同的密钥)。如果是,则接受用户。
    • 这创建了一个严格的 Base64 编码,我假设他们能够在他们的 PHP 应用程序中生成它。谢谢。
    猜你喜欢
    • 2011-07-12
    • 1970-01-01
    • 2016-08-20
    • 1970-01-01
    • 2022-09-23
    • 1970-01-01
    • 2020-03-11
    • 2011-01-01
    • 1970-01-01
    相关资源
    最近更新 更多