代码之家  ›  专栏  ›  技术社区  ›  Brian Deterling

我如何确保我的Oauth秘密在phulsion乘客Sinatra应用程序?

  •  1
  • Brian Deterling  · 技术社区  · 14 年前

    我有一个应用程序使用单用户OAuth令牌。我可以将这四个值(消费者密钥/秘密、令牌/秘密)直接存储在应用程序中,但这不是推荐的,我不希望将这些秘密签入源代码。应用程序不使用数据库。我知道,不管我存储它们的方式如何,有权访问服务器的人都能找到它们,但我至少想从源代码中获取它们。我曾经想过将它们作为乘客环境变量传递,或者将它们存储在服务器上的单独文件中,但是有更好的方法吗?是否有必要对它们进行加密,因为任何能看到它们的人都有解密所需的访问权?

    1 回复  |  直到 14 年前
        1
  •  0
  •   Daniel Ribeiro    14 年前

    实际上,不将密钥存储在源代码中是不好的做法,因为这是最灵活的设置。( continuous deployment )

    但是,根据您所说的,您希望有两个组:能够生成代码的组和能够部署代码的组。可以部署它的人可以访问密钥,并且在最安全的设置中,不能使用应用程序的代码。您可以通过让编写代码的人对代理所有授权部分并对应用程序进行身份验证的系统进行自动身份验证,从而使OAuth仍然工作。这些密钥(app->auth middle man)可以在存储库中,因为它们是内部的。

    任何其他设置:由那些可以部署、加密密钥的人创建的身份验证库,任何其他设置都可能被编写代码的人破坏。如果您不信任他们,无法访问密钥,那么您可能不信任他们,无法尝试访问。 越狱 钥匙。

    由此产生的部署方案要复杂得多,因此更容易出现错误。但如果不是这样,它就更安全了。您仍然需要信任一些人,比如安装操作系统的人、代理的系统中间件、维护代理的机器的人、能够长期使用代理的人等等。如果有权访问密钥的人的groupo足够小,并且您信任他们,那么您就获得了安全性。否则,你就失去了安全感,对变化的反应能力,浪费了很多人的时间。

    不幸的是,所有授权方案都要求您信任某人。不可能。这对于任何应用程序/框架/授权方案都是有效的,不仅是西纳特拉、Rails、OAuthe、Java、RSA签名、椭圆曲线等等。