如何在rails数据库中加密OAuth秘密/令牌?

时间:2013-11-07 23:59:16

标签: ruby-on-rails ruby encryption oauth oauth-2.0

我在Ruby 2.0上运行了Ruby on Rails应用程序(v4.0.1虽然我认为不相关),但我允许用户将OAuth用于第三方服务,以便我访问他们的数据。

我已将应用程序的Consumer Key和Consumer Secret存储在源代码控制之外的环境变量中。

在OAuth / OAuth2舞蹈中的最后一次回调之后,我为每个用户提供了可用于访问其信息的令牌。

对于他们的登录凭据,我使用一种方式散列,不能将他们的密码以纯文本形式存储在我的数据库中,所以我想我应该用他们的令牌做类似的事情,但是因为我需要使用这些令牌来访问他们的数据,我需要能够重现纯文本,所以我想弄清楚对称加密的最佳方法是什么。

我打算将加密密钥存储为环境变量,然后使用https://gist.github.com/nono/2995118之类的东西来加密令牌。这样安全吗?

让人们使用这个https://github.com/reidmorrison/symmetric-encryption宝石吗?

我试图阻止自己重新发明轮子。有什么提示吗?

2 个答案:

答案 0 :(得分:0)

django-allauth并不是OAuth(2)实现的懈怠。我现在正在查看它的socialaccount_socialtoken表,并且令牌都是明文的。我认为你被覆盖了,因为没有人可以使用令牌,如果他们偷了它们。

答案 1 :(得分:0)

我最终使用attr_encrypted宝石 - https://github.com/attr-encrypted/attr_encrypted

我将我的密码添加到我的.env文件中,以便它不受版本控制。

以下是您如何使用它:

attr_encrypted :email, :key => 'a secret key'