Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 存储外部API的密码-最佳实践_Ruby_Authentication_Service - Fatal编程技术网

Ruby 存储外部API的密码-最佳实践

Ruby 存储外部API的密码-最佳实践,ruby,authentication,service,Ruby,Authentication,Service,如果我构建了一个应用程序,可以访问Gmail、Twitter和Facebook等网站的部分数据,我希望用户只需输入一次身份验证信息,几天或几周后就会重置,那么在Ruby中动态执行此操作的最佳方法是什么 我看到很多人只是拥有一个客户端/用户凭据的配置文件,如下所示: 这似乎是a)它非常不安全,b)如果我想为成千上万的用户存储此类信息,它将不起作用。推荐的方法是什么 我希望能够在这些服务的基础上构建一个界面,因此每次用户进行交易时都必须输入凭据是不可行的。这就是它的工作方式,例如,对于fetcma

如果我构建了一个应用程序,可以访问Gmail、Twitter和Facebook等网站的部分数据,我希望用户只需输入一次身份验证信息,几天或几周后就会重置,那么在Ruby中动态执行此操作的最佳方法是什么

我看到很多人只是拥有一个客户端/用户凭据的配置文件,如下所示:

这似乎是a)它非常不安全,b)如果我想为成千上万的用户存储此类信息,它将不起作用。推荐的方法是什么


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

这就是它的工作方式,例如,对于fetcmailrc,它必须是chmod到600(仅由其所有者可读写)。是的,它包含普通密码。

此类服务提供授权。强烈建议您查看一下。

如果您对黑客入侵您的数据库/文件系统的潜在责任感到满意,那么就去做吧。平心而论,您还应该向用户披露他们的密码将存储在您的系统中,并让他们决定是否要给予您的程序那种程度的信任

但为什么要这么做呢?使用OAuth的Facebook Connect和Twitter&Google根本不需要存储用户密码。在某个时刻,用户的cookie将过期(或者他们将尝试从另一台计算机访问您的站点),他们将不得不重新验证。您不能阻止重新身份验证-相反,您应该让最终用户尽可能容易地处理它。

Security 我假设您的应用程序需要知道明文密码。那么就没有办法用简单的方式来存储它了

  • 以某种编码方式存储,例如Base64,这可以保护您在用眼睛查看数据库时不知道密码,但它不能保护您免受其他任何影响
  • 确保任何其他用户都无法读取这些文件
  • 加密你的硬盘,这样没有人能从偷你的硬盘中得到密码。您的计算机将需要在引导过程中输入密码
储存 在文件系统中存储大量数据没有什么错。为了获得更好的性能,您可以执行以下操作

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

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

我强烈建议您使用OAuth,但是如果您必须存储密码(请务必使用OpenSSL库来加密密码)。OpenSSL库在Ruby中的文档记录非常差,但据我所知,它们与C OpenSSL库非常相似。因为我认为您应该使用OAuth,而不是存储密码,所以我将让您自己查找文档

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


gmail_account:
    username: myClient
    password: myClientsPassword