使用ActiveResource和会话令牌验证请求

时间:2017-02-13 16:01:48

标签: ruby-on-rails ruby authentication devise activeresource

我有一个rails API和一个rails客户端应用程序,它们通过ActiveResource相互通信。这非常有用,直到我需要为每个ActiveResource请求传递一个唯一的令牌来验证用户身份。根据我的理解,ActiveResource令牌在类级别设置并且不能轻易更改,如果我希望人们在经过身份验证后传递其唯一会话令牌,这显然是个问题。

以下是我尝试实施的流程:

  1. 用户在客户端应用上提交凭据。
  2. 客户端应用程序将凭据传输到API。
  3. API通过Devise验证凭据并返回身份验证令牌。
  4. 客户端收到身份验证令牌并保存在会话中。
  5. 来自客户的所有后续请求都包含身份验证令牌。
  6. API使用附带的身份验证令牌对所有请求进行身份验证。
  7. SO和Github上有很多不同的帖子。有人说it simply cannot be done,其他人说that you can force it, but there are issues with threading

    如何在不失去ActiveResource提供的巨大优势的情况下完成我想要做的事情?

1 个答案:

答案 0 :(得分:1)

Active Resource在过去一年左右的时间里经历了相当大的更新,现在在现代网络中运作良好。

Active Resource使用自定义标头通过ActionController :: HttpAuthentication :: Token类支持Rails提供的token based authentication

class Person < ActiveResource::Base
  self.headers['Authorization'] = 'Token token="abcd"'
end

您还可以使用相同的方式设置任何特定的HTTP标头。如上所述,标头是线程安全的,因此您可以动态设置标头,即使在多线程环境中也可以

ActiveResource::Base.headers['Authorization'] = current_session_api_token

我在API控制器中使用第二种方法非常成功地使用了ActiveLogic的OAuth JWT策略:

ActiveResource::Base.headers['Authorization'] = "Bearer #{jwt.token}"