繁体   English   中英

在到期前使​​用omniauth刷新LinkedIn令牌

[英]Refresh LinkedIn token with omniauth before expiration

我有一个Rails(3.2.11)应用程序,允许用户发布他们的LinkedIn个人资料的更新。 我目前正在使用omniauth-linkedin gem捕获初始用户身份验证,并使用linkedin gem发布更新。 我遇到的问题是,LinkedIn访问令牌在60天后过期,但根据他们的文档 ,令牌可以在到期之前刷新,而无需用户重新授权应用程序。

我已经查看了LinkedIn 提示和技巧身份验证概述以及StackOverflow上的大量帖子 - 这个这个只是几个例子 - 我仍然找不到任何答案。

在用户授权应用程序(通过omniauth-linkedin )后,我保存了从LinkedIn返回给我的access_tokensecret 我需要弄清楚如何使用仍然有效的access_token来刷新它并将过期日期再延长60天。

我尝试过使用LinkedIn的authenticate端点(其中tokens.access_token是当前有效的令牌):

url = "https//www.linkedin.com/uas/oauth/authenticate?oauth_token=" + tokens.access_token
result = RestClient.post(url, {oauth_callback: "http://localhost:3000/users/auth/linkedin/callback"})

但是我undefined method 'request_uri' for #<URI::Generic:0x1b144d20> Exception获得了一个undefined method 'request_uri' for #<URI::Generic:0x1b144d20>

我尝试过使用OAuth :: Consumer客户端(其中tokens.access_tokentokens.token_secret是当前有效的令牌):

configuration = { site: 'https://api.linkedin.com', authorize_path: '/uas/oauth/authenticate',
                  request_token_path: '/uas/oauth/requestToken', access_token_path: '/uas/oauth/accessToken' }
consumer = OAuth::Consumer.new(ENV['LINKEDIN_APP_ID'], ENV['LINKEDIN_SECRET'], configuration)
access_token = OAuth::AccessToken.new(consumer, tokens.access_token, tokens.token_secret)

但这只是给了我相同的access_tokensecret

最后,我希望能够利用现有的omniauth-linkedin gem功能来处理这个刷新,如果可能的话,任何想法? 谢谢!

在您的第二种方法中(使用OAuth :: Consumer客户端并传入您现有的访问令牌和秘密)应该为您刷新令牌。 正如文档所述,只要当前用户登录到LinkedIn.com并且当前访问令牌尚未到期,该令牌将被刷新。

这并不一定意味着您将获得新的令牌。 你可能会得到和以前一样的。 关键的区别是令牌的寿命应该是60天。 您可以通过检查oauth_expires_in参数的值来验证这一点。 它应该设置为5184000。

这篇博文详细介绍了如何刷新令牌: https//developer.linkedin.com/blog/tips-and-tricks-refreshing-access-token

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM