使用ActiveResource和会话令牌对请求进行身份验证



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

以下是我试图实现的流程:

  1. 用户在客户端应用程序上提交凭据
  2. 客户端应用程序将凭据传输到API
  3. API通过Devise验证凭据并返回一个auth令牌
  4. 客户端接收身份验证令牌并保存在会话中
  5. 来自客户端的所有后续请求都包含auth令牌
  6. API使用包含的身份验证令牌对所有请求进行身份验证

SO和Github上有很多关于这方面的不同帖子。有人说这根本无法完成,也有人说你可以强制执行,但线程存在问题。

我如何才能在不失去ActiveResource提供的巨大好处的情况下完成我想要做的事情?

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

Active Resource支持Rails通过ActionController::HttpAuthentication::token类使用自定义头提供的基于令牌的身份验证。

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

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

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

我在API控制器中使用了第二种方法:,非常成功地将OAuth JWT策略与Active Resource一起使用

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