OAuth2 - 创建客户端以调用API

时间:2014-08-11 08:23:33

标签: ruby-on-rails ruby oauth linkedin omniauth

我目前正在尝试调用Linkedin API(当然还有其他API)。 我正在使用OAuth2和Linkedin策略宝石。链接http://my_app/auth/linkedin有效,我在数据库中注册了access_token

的信息

现在我试图让LinkedinApi获得一些信息。 Linkedin gem有这样的行(gems/omniauth-linkedin-oauth2-0.1.5/lib/omniauth/strategies/linkedin.rb):

access_token.get("/v1/people/~:(#{options.fields.join(',')})?format=json").parsed

定义的access_token
def access_token
  ::OAuth2::AccessToken.new(client, oauth2_access_token.token, {
    :mode => :query,
    :param_name => 'oauth2_access_token',
    :expires_in => oauth2_access_token.expires_in,
    :expires_at => oauth2_access_token.expires_at
  })
end

我的问题是:如何创建client对象和oauth2_access_token

可以使用OmniAuth::Strategy::Linkedin.new(nil).client创建客户端,但我不确定这是正确的方法。

OAuth宝石中有很多功能,我迷路了!如何创建对API的简单调用?

1 个答案:

答案 0 :(得分:0)

如果您正在使用OAuth,则始终需要一个令牌(而不仅仅是客户端)才能发出授权请求 - 该令牌构成您的授权。不同之处在于您是否需要用户授权。如果这样做,那么您需要让用户参与获取令牌(使用授权代码或隐式授权流程),并且在获得令牌后,您可以使用它来对用户授予您的受保护资源进行授权请求授权。如果没有,那么您可以使用客户端凭据OAuth流仅使用您的应用程序凭据获取令牌。之后,您可以使用该令牌访问客户端可以自己访问的受保护资源。但无论哪种方式,您都需要一个令牌才能发出API请求。

但是要获取客户端凭据令牌,OmniAuth是错误的工具。 Omniauth将自己描述为"a library that standardizes multi-provider authentication for web applications."您正在谈论使用OAuth2对受保护资源进行授权请求。这些事情并非完全不相关,因为大多数Omniauth策略都使用OAuth2,因为OpenID Connect标准建立在OAuth2之上。但OAuth是授权协议,而不是身份验证。 OmniAuth使用它,但它不是为了提出任何受保护资源的请求而设计的 - 它仅用于验证您的应用程序用户。

你想要的是OAuth2 gem。如果你使用OmniAuth,你已经拥有了这个宝石 - 它是一个依赖。但它有你正在寻找的API,而不是OmniAuth。