从OAuth安全存储令牌/秘密/等的正确方法?

时间:2010-05-03 21:48:57

标签: ruby database security oauth

我刚开始研究OAuth,它看起来非常好。我现在在红宝石中oauth with twitter working

现在我想知道,在本地数据库和会话中存储响应的建议安全方法是什么?

  • 我应该存储什么?
  • 我应该在哪里存放?

此示例twitter-oauth-with-rails应用在会话中存储user.id,用户表包含tokensecret。但是,通过传递一大堆测试用户id,看起来很容易破解和获取秘密,不是吗?

2 个答案:

答案 0 :(得分:6)

如果没有Twitter应用程序的消费者密钥/秘密,令牌就毫无用处,因为它们对于每个应用程序都不相同,但取决于消费者密钥/秘密。

要获得会话变量,您必须猜测会话ID,这不容易实现。

如果您希望可以在会话中存储这些令牌,但我建议将用户令牌存储在数据库中,并包含所有其他用户数据,以便您的会话仅包含用于识别系统中用户的数据。

更新:我不确定我是否正确理解您通过猜测ID从数据库访问令牌的意思。

您是否有任何身份验证,以便用户必须输入一些凭据才能访问其数据?您应该以存储用户电子邮件地址或密码的方式存储令牌,并且只有经过身份验证的用户才能访问它。

答案 1 :(得分:1)

如果您正在开发一个Web应用程序,您可以在用户提交的表单中添加hidden字段,并使用user.id计算一些类似哈希的值,这样邪恶的人就无法更改该值只是“猜测”一个访问令牌