首页 > 解决方案 > 使用 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。

标签: oauthruby-on-rails-5activeresource

解决方案


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


推荐阅读