【问题标题】:How to reverse look up a user from an access_token (Rails, Devise)如何从 access_token 反向查找用户(Rails,Devise)
【发布时间】:2016-01-23 09:34:24
【问题描述】:

我的 Rails 应用具有登录/注销功能,登录后返回有效的 access_token。

我正在使用这个宝石

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 查找用户?

谢谢。

【问题讨论】:

  • 除非您发布用于生成令牌的代码,否则很难回答这个问题。
  • 我认为您指的是 OAuth + Devise 是否正确?
  • 我正在使用这个 gem github.com/lynndylanhurley/devise_token_auth 为我处理生成/验证身份验证令牌,所以我不知道它是如何做到的。

标签: ruby-on-rails ruby authentication devise access-token


【解决方案1】:

根据文档:

access-token 这是每个请求的用户密码。该值的散列版本存储在数据库中以供以后比较。 应在每次请求时更改此值

而且它似乎是使用 BCrypt 的标记化,并且每次都会更改以确保安全。

此外,它们不允许您仅从令牌中查找数据库中的用户,以免造成安全漏洞。您可以选择以创造性的方式或在会话中存储 UID 以进行查找,并在您的 application_controller.rb 中编写一个方法,然后对该数据执行一些逻辑。

这里提到了:

uid 用于识别用户的唯一值。 这是必要的,因为通过访问令牌在数据库中搜索用户会使 API 容易受到 timing attacks 的影响

【讨论】:

  • 谢谢。是的,如果我允许仅通过访问令牌查找用户,我实际上担心可能的漏洞(定时攻击,......)......我还看到了保存在用户记录中的令牌的哈希版本。我想我需要为每个请求传递访问令牌、client_id 或 uuid。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-04
  • 1970-01-01
  • 1970-01-01
  • 2011-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多