我正在创建一个成员的应用程序,已经设计在认证工作。我真的很纠结于这些不同的标记是如何起作用的。
我正在使用描述:token_authenticatable的方法重新实现最近被废弃的这里设计“策略”。我希望将令牌身份验证添加到API中,并使用用户的令牌对请求进行签名。
我想知道的是,尽管它使用Devise.secure_compare来阻止定时攻击,但它仍然将authentication_token存储在纯文本中,所以如果有人要访问数据库,这些令牌可能会用来窃取会话,不是吗?
Devise似乎在模块中使用了两种不同类型的“令牌”:
Devise.friendly_token创建令牌并将其存储为纯文本。然后通过此令牌进行查找(如在:rememberable中使用)。Devise.token_generator创建咸令牌(如:confirmable中所示)。在我看来,第二个方法是使用Devise.secret_key对令牌进行盐碱化的,它是从config/secils.yml中的Rails秘密派生的。这样就可以加密令牌,如果数据库由于某种原因而公开,则无法使用令牌,对吗?相当于拥有私钥(rails秘密)和公钥(authentication_token)。
我有不少忧虑:
authentication_token吗?发布于 2014-09-03 16:17:19
Devise做了很多事情,而不一定是您特定的应用程序需要的东西,也不一定是您的应用程序所需要的方式。我发现这不适合我的申请。缺乏对api令牌身份验证的支持/删除提供了足够的动力来继续前进并实现我所需要的。我能够很容易地从零开始实现令牌。我还在管理用户注册/工作流/邀请等方面获得了充分的灵活性,而没有设计所需的约束和扭曲。我仍然使用Warden,它也是用于Rack中间件集成的。
我提供了一个在另一个堆叠溢出问题上实现令牌身份验证/授权的示例。您应该能够使用该代码作为令牌身份验证的起点,并实现所需的任何其他令牌保护。我也在Ember.js中使用我的Ember.js令牌方法。
还要考虑是否加密令牌仅仅是挥手,因为取决于您的部署环境和您如何管理主密钥/秘密,它可能会给人一种错误的安全感。还请记住,加密并不意味着令牌或相关身份验证/授权信息的完整性/有效性,除非您还有一个MAC/签名,该签名包含在访问决策中使用的所有内容。因此,虽然您可能遇到了保护令牌不受访问您数据库的攻击者的困扰,但对于这些攻击者来说,将伪造的令牌注入数据库或提高数据库中现有用户的权限,或者只是窃取或修改真实的数据(这可能正是他们真正想要实现的),这可能是微不足道的!
我已经做了一些大的评论,为所有认证/授权信息(令牌是认证/授权信息的一部分)提供完整性和保密性控制。我建议阅读全期来了解问题的范围和需要考虑的事情,因为目前所有的宝石都没有做应该做的事情。我概述了如何避免将令牌完全存储在服务器上(完全是),并提供了一些gist中的示例令牌生成和身份验证代码,它也处理基于时间的攻击。
https://stackoverflow.com/questions/25374523
复制相似问题