存储外部API的密码-最佳做法

ruby authentication service

1447 观看

5回复

34147 作者的声誉

如果我构建了一个应用程序,该应用程序访问了Gmail,Twitter和Facebook等用户的某些数据,并且希望用户只需输入一次身份验证信息,并且几天或几周后将其重置,那是最好的选择Ruby中动态地做到这一点的方法?

我看到很多人只有他们的客户/用户凭据的配置文件,如下所示:


gmail_account:
    username: myClient
    password: myClientsPassword

看起来a)似乎非常不安全,b)如果我想为成千上万的用户存储这种信息,那将是行不通的。推荐的方法是什么?

我希望能够在这些服务之上构建一个接口,因此每次用户进行交易时都必须输入凭据是不可行的。

作者: Lance Pollard 的来源 发布者: 2009 年 12 月 13 日

回应 (5)


1

9610 作者的声誉

例如,这是fetcmailrc的工作方式,该文件必须chmod设置为600(只能由其所有者读取和写入)。是的,它包含普通密码。

作者: Aif 发布者: 13.12.2009 09:22

6

18320 作者的声誉

此类服务提供OpenAuth授权。强烈建议您看看。

作者: khelll 发布者: 13.12.2009 09:24

6

27333 作者的声誉

决定

如果您可以接受当黑客进入您的数据库/文件系统时的潜在责任,那就去吧。公平地说,您还应该向用户披露他们的密码将存储在您的系统上,并让他们决定是否要给予您的程序这种信任级别。

但是,为什么要首先这样做呢?使用OAuth的Facebook Connect,Twitter和Google完全不需要您存储用户密码。用户的Cookie有时会过期(否则他们将尝试从另一台计算机访问您的网站),因此必须重新进行身份验证。您不能阻止重新认证-相反,您应该使最终用户尽可能容易地进行处理。

作者: leepowers 发布者: 13.12.2009 09:31

2

6091 作者的声誉

安全

我假设您的应用程序需要以明文形式知道密码。这样就无法以某种简单的方式存储它。

  • 以某种编码方式存储,例如。Base64,这样可以保护您在通过眼睛查看数据库时不知道密码,但不能保护您免受其他任何攻击。
  • 确保任何其他用户都无法读取文件
  • 加密您的硬盘驱动器,因此没有人可以从窃取您的硬盘驱动器中获取密码。在启动过程中,您的计算机将要求您输入密码。

储存

在文件系统中存储大量数据没有错。为了获得更好的性能,您可以执行以下操作

  • 每个用户一个文件,因此文件系统而不是ruby需要搜索数据
  • 制作很多子目录。如果将多个文件放在一个目录中,则某些文件系统的性能会受到影响。例如。将文件“ abcd”放入“ a / b / c / d”

您可以使用数据库而不是文件系统

作者: johannes 发布者: 13.12.2009 09:48

0

7863 作者的声誉

我强烈建议您使用OAuth,但是如果您必须存储密码(请绝对确保需要这样做),则可以使用OpenSSL库来加密密码。OpenSSL库在Ruby中的文档很少,但是据我所知它们与C OpenSSL库非常相似。由于我认为您应该使用OAuth,而不要存储密码,因此我会让您自己查找文档。

但是,对于OAuth方法,您需要看一下OAuth gemGoogleTwitter(我建议您使用优秀的twitter gem作为它)和facebook(有两个看似不错的选择:RFacebookfacebooker

作者: sarahhodne 发布者: 14.12.2009 02:56
32x32