Обновить токен 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

Другие вопросы по тегам