存储第三方服务的密码

时间:2010-11-29 02:52:53

标签: ruby-on-rails security encryption ruby-on-rails-3

我的应用程序是ruby-on-rails,但我希望这个问题的任何答案都可能与框架无关。

我的应用程序使用rails ActionMailers a-la:

通过gmail SMTP发送电子邮件
mail = MyActionMailerSubclass.setup_email

options = { :address          => "smtp.gmail.com",
        :port                 => 587,
        :domain               => 'mydomain.com',
        :user_name            => 'myuser@mydomain.com',
        :password             => 's3cur3p@s$w0rd',
        :authentication       => 'plain',
        :enable_starttls_auto => true  }

mail.delivery_method :smtp, options
mail.deliver

好的,那太棒了......应用程序代码中的纯文本密码是gmail。或者我可以用纯文本将其存储在数据库中。显然两者都是不可接受的。

Salting和hashing,通常的技术在这里不起作用,因为我需要将密码发送到gmail。

那么,为第三方服务保护密码有哪些策略?

最终用户名和密码甚至不属于我,他们将属于应用程序最终用户。

2 个答案:

答案 0 :(得分:4)

Gmail的SMTP服务器支持两种身份验证机制:PLAIN和XOAUTH。 PLAIN机制要求您知道用户的明文密码,我很高兴您不准备存储这些密码。

查看Gmail使用的OAuth协议。我还没有使用它,我发现Gmail支持SMTP,所以我不能再帮助了,但我会说这正是你想要的。 OAuth是一种服务(例如Gmail)允许第三方服务(例如您的)代表用户执行一组有限操作而无需使用其密码登录的方式。

答案 1 :(得分:0)

如果应用程序是私有的,那么这应该没关系,但我猜它是针对公共/开源应用程序。

如果是这种情况,请将该文件的基本示例添加为 config / initializers / mail.rb.example ,并将真实内容添加到 .gitignore 文件,以便它永远不会提交。之后,向人们需要通过 mail.rb.example 文件复制到 mail.rb README 添加说明,以便应用程序按预期工作。