1

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

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

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

我尝试使用来自 LinkedIn 的身份验证端点(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>例外。

我尝试使用 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_tokensecret

最后,我希望能够利用现有的omniauth-linkedingem 功能来处理这个刷新,知道这是否可能吗?谢谢!

4

1 回答 1

4

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

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

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

于 2013-01-16T00:33:22.987 回答