如何通过access_token(Rails, Devise)逆向查找用户

3
我的Rails应用程序已经实现了登录/注销功能,并在登录后返回有效的access_token。
我正在使用这个gem:https://github.com/lynndylanhurley/devise_token_auth 但是,我如何在后续请求中使用这个access_token呢?例如:
abc.com/action?access_token=123

我认为在我的控制器和操作方法中,我应该能够通过这个access_token找到用户,但我不确定是否可以使用Devise实现。

如果我同时传递:client或:uid和:access_token,我可以通过执行以下操作来验证此令牌:

user = User.find_by_uid uid
user.valid_token? access_token, client

仅凭access_token能否找到用户?
谢谢。

2
除非您发布用于生成令牌的代码,否则很难回答这个问题。 - taglia
我想问一下,你是在指OAuth + Devise吗? - Richard Peck
我正在使用这个 gem https://github.com/lynndylanhurley/devise_token_auth 来处理生成/验证身份验证令牌,所以我不知道它是如何实现的。 - RoundOutTooSoon
1个回答

1
根据文档:
access-token:这是每个请求的用户密码。该值的哈希版本存储在数据库中以供以后比较。为了安全起见,每次请求都应更改此值。
似乎使用BCrypt进行令牌化,并且每次更改以增强安全性。
此外,由于安全漏洞,他们不允许您仅使用令牌在DB中查找用户。您可以选择以创造性的方式或在会话中存储UID以进行查找,并编写一个方法在您的application_controller.rb中对该数据执行某些逻辑。
这在此处提到: uid:用于标识用户的唯一值。这是必要的,因为通过访问令牌搜索用户的DB将使API易受时间攻击的影响。

谢谢。是的,我实际上关心的是可能存在的漏洞(时间攻击等),如果仅凭访问令牌就允许查找用户...我还看到令牌的散列版本保存在用户记录中。那么我想每个请求都需要传递访问令牌、客户端 ID 或 UUID。 - RoundOutTooSoon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接