首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在devise中使用rails秘密进行盐分认证密钥

在devise中使用rails秘密进行盐分认证密钥
EN

Stack Overflow用户
提问于 2014-08-19 01:49:35
回答 1查看 1.2K关注 0票数 3

我正在创建一个成员的应用程序,已经设计在认证工作。我真的很纠结于这些不同的标记是如何起作用的。

我正在使用描述:token_authenticatable的方法重新实现最近被废弃的这里设计“策略”。我希望将令牌身份验证添加到API中,并使用用户的令牌对请求进行签名。

我想知道的是,尽管它使用Devise.secure_compare来阻止定时攻击,但它仍然将authentication_token存储在纯文本中,所以如果有人要访问数据库,这些令牌可能会用来窃取会话,不是吗?

Devise似乎在模块中使用了两种不同类型的“令牌”:

  1. 使用Devise.friendly_token创建令牌并将其存储为纯文本。然后通过此令牌进行查找(如在:rememberable中使用)。
  2. 使用Devise.token_generator创建咸令牌(如:confirmable中所示)。

在我看来,第二个方法是使用Devise.secret_key对令牌进行盐碱化的,它是从config/secils.yml中的Rails秘密派生的。这样就可以加密令牌,如果数据库由于某种原因而公开,则无法使用令牌,对吗?相当于拥有私钥(rails秘密)和公钥(authentication_token)。

我有不少忧虑:

  • 我应该使用Devise.token_generator来创建authentication_token吗?
  • 这类令牌的安全性是什么词?
  • CSRF令牌因素是如何设计的?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-03 16:17:19

Devise做了很多事情,而不一定是您特定的应用程序需要的东西,也不一定是您的应用程序所需要的方式。我发现这不适合我的申请。缺乏对api令牌身份验证的支持/删除提供了足够的动力来继续前进并实现我所需要的。我能够很容易地从零开始实现令牌。我还在管理用户注册/工作流/邀请等方面获得了充分的灵活性,而没有设计所需的约束和扭曲。我仍然使用Warden,它也是用于Rack中间件集成的。

我提供了一个在另一个堆叠溢出问题上实现令牌身份验证/授权的示例。您应该能够使用该代码作为令牌身份验证的起点,并实现所需的任何其他令牌保护。我也在Ember.js中使用我的Ember.js令牌方法。

还要考虑是否加密令牌仅仅是挥手,因为取决于您的部署环境和您如何管理主密钥/秘密,它可能会给人一种错误的安全感。还请记住,加密并不意味着令牌或相关身份验证/授权信息的完整性/有效性,除非您还有一个MAC/签名,该签名包含在访问决策中使用的所有内容。因此,虽然您可能遇到了保护令牌不受访问您数据库的攻击者的困扰,但对于这些攻击者来说,将伪造的令牌注入数据库或提高数据库中现有用户的权限,或者只是窃取或修改真实的数据(这可能正是他们真正想要实现的),这可能是微不足道的!

我已经做了一些大的评论,为所有认证/授权信息(令牌是认证/授权信息的一部分)提供完整性和保密性控制。我建议阅读全期来了解问题的范围和需要考虑的事情,因为目前所有的宝石都没有做应该做的事情。我概述了如何避免将令牌完全存储在服务器上(完全是),并提供了一些gist中的示例令牌生成和身份验证代码,它也处理基于时间的攻击。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25374523

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档