我目前正在尝试调用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_tokendef 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的简单调用?
答案 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。