使用OAuth时,从何处启动活动资源的身份验证请求



我在连接OAuth和Active Resource的几个点时遇到问题。以下是我所知道的:ActiveResource文档告诉我可以在ActiveResource模型本身上设置身份验证令牌,如下所示:

ActiveResource::Base.connection.auth_type = :bearer
ActiveResource::Base.connection.bearer_token = @bearer_token
class Estimate < ActiveResource::Base
self.connection.auth_type = :bearer
self.connection.bearer_token = @bearer_token
self.site = "https://apistaging.uship.com/v2/estimate"
end

此外,在我的代码的一个完全独立的部分中,我可以通过以下基本HTTP请求检索我需要的承载令牌(出于隐私考虑,省略了我的实际客户端id和机密(:

uri = URI('https://apistaging.uship.com/oauth/token')
res = Net::HTTP.post_form(uri, 'grant_type' => 'client_credentials', 'client_id' => 'XXXXXXXXXXXXXXXXXXX', 'client_secret' => 'YYYYYYY')

当我打印res时,它会给我一个有效的令牌,我已经测试过了。它看起来像这样:

{
"access_token": "AAAAAAAAAAAAAAAAAAAAA",
"token_type": "bearer",
"expires_in": 600,
"refresh_token": "BBBBBBBBBBBBBBBBBBBBB"
}

但是我在哪里打这个电话?我猜可能在任何将使用Active Resource的控制器上使用某种before_filter?如果是,我如何将access_token传递给ActiveResource模型中的变量@bear_token。此外,我知道访问令牌将在10分钟后过期,因此不知何故,此代码必须知道如何在正确的时间再次运行oauth令牌,或者在不到10分钟的时间间隔内使用Active Resource时传递刷新令牌。我很惊讶没有在网上找到一个简单的教程。如果有人觉得我应该使用gem来实现自动化,请告诉我是哪一个,因为我发现的所有东西似乎都不适用于rails 5。

如果像这样扩展ActiveResourcehttps://gist.github.com/acherukuri/0f297e145b8242c2e991647c77f1a91e具有https://github.com/oauth-xx/oauth-ruby,您可以使用OAuth gem而不是ActiveResource来调用您的服务,但响应可以移交给ActiveResource,这样您仍然可以在控制器中使用ActiveResource::ServerError样式来挽救错误。通过这种方式,您的控制器将不会因生成OAuth令牌而受到污染,而且ActiveResource只有在即将过期时才会生成新的OAuth代币。(相同的令牌将用于后续调用,直到它过期为止(