oauth - 使用 OAuth 时从哪里开始对活动资源的身份验证请求
问题描述
我无法将一些点与 OAuth 和 Active Resource 连接起来。这是我所知道的:Active Resource 文档告诉我,我可以像这样在 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')
当我 printres
时,它给了我一个有效的令牌,我已经测试过了。它看起来像这样:
{
"access_token": "AAAAAAAAAAAAAAAAAAAAA",
"token_type": "bearer",
"expires_in": 600,
"refresh_token": "BBBBBBBBBBBBBBBBBBBBB"
}
但是我在哪里运行这个电话?我猜可能在任何将使用 Active Resource 的控制器上都有某种 before_filter?如果是这样,我如何将 access_token 传递给我的 ActiveResource 模型中的变量@bearer_token。另外,我知道该访问令牌将在 10 分钟内过期,因此该代码必须知道如何在正确的时间再次运行 oauth 令牌,或者在不到 10 分钟的时间内使用 Active Resource 时传递刷新令牌间隔。我很惊讶没有在网上找到一个简单的教程。如果有人觉得我应该使用 gem 来自动执行此操作,请告诉我是哪一个,因为我发现的所有内容似乎都不适用于 rails 5。
解决方案
如果您使用 https://github.com/oauth-xx/oauth-ruby 像这样扩展 ActiveResource https://gist.github.com/acherukuri/0f297e145b8242c2e991647c77f1a91e ,您将能够使用 OAuth gem 调用您的服务而不是 ActiveResource 但响应可以移交给 ActiveResource 以便您仍然可以使用控制器中的样式来挽救错误。通过这种方式,您的控制器不会被 OAuth 令牌的生成所污染,并且 ActiveResource 只会在它即将到期时生成一个新的 OAuth 令牌。(相同的令牌将用于后续调用,直到它过期)ActiveResource::ServerError