[英]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_token
和secret
。 我需要弄清楚如何使用仍然有效的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_token
和tokens.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_token
和secret
。
最后,我希望能够利用现有的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.