Обновить токен LinkedIn с помощью omniauth до истечения срока действия
У меня есть приложение Rails (3.2.11), которое позволяет пользователям публиковать обновления в своих профилях LinkedIn. Я в настоящее время использую omniauth-linkedin
драгоценный камень, чтобы захватить начальную аутентификацию пользователя и linkedin
жемчужина для публикации обновлений. У меня проблема в том, что токены доступа LinkedIn истекают через 60 дней, но, согласно их документации, токен может быть обновлен до истечения срока действия без необходимости повторной авторизации приложения пользователем.
Я посмотрел на Советы и хитрости LinkedIn, Обзор аутентификации и тонны постов в Stackru - это, это, и это всего лишь пара примеров - и я до сих пор не могу найти ответы.
После того, как пользователь авторизует приложение (через omniauth-linkedin
Я спасаю access_token
а также secret
вернулся ко мне из 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_token
а также secret
,
В конце концов, я хотел бы иметь возможность использовать существующие omniauth-linkedin
Функциональность gem для обработки этого обновления, есть идеи, если это возможно? Спасибо!
1 ответ
При втором подходе (использование клиента OAuth::Consumer и передача существующего токена доступа и секрета) следует обновить токен для вас. Как говорится в документации, пока текущий пользователь вошел в LinkedIn.com и текущий токен доступа еще не истек, токен будет обновлен.
Это не обязательно означает, что вы получите новый токен. Вы можете получить тот же, что и раньше. Ключевое отличие заключается в том, что срок жизни токена должен составлять 60 дней. Вы можете убедиться в этом, проверив значение параметра oauth_expires_in. Это должно быть установлено на 5184000.
Этот блог подробно описывает обновление токена: https://developer.linkedin.com/blog/tips-and-tricks-refreshing-access-token