我的应用程序是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。
那么,为第三方服务保护密码有哪些策略?
最终用户名和密码甚至不属于我,他们将属于应用程序最终用户。
答案 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 添加说明,以便应用程序按预期工作。