LinkedIn OAuth2: "не удалось проверить токен доступа"

Он работает , если и только если пользователь входит в LinkedIn во время выполнения запроса OAuth2.

если пользователь не вошел в систему, то мы сталкиваемся с ошибкой.

последовательность действий:

  • успешно получить свежий маркер доступа
  • используя маркер доступа, отправьте сообщение в конечную точку api https://api.linkedin.com/v1/people/~

после этого мы получаем 401 со следующими содержание:

{
  "errorCode": 0,
  "message": "Unable to verify access token",
  "requestId": "C0DUCX81SA",
  "status": 401,
  "timestamp": 1421946470523
}

иногда, через некоторое время, повторная попытка с тем же маркером доступа дает 200. Иногда нет.

если пользователь входит в LinkedIn в течение этого "401 периода", то волшебным образом начинает работать ранее извлеченный маркер доступа.

Я в недоумении, как это решить, поскольку это, похоже, проблема в LinkedIn.

кто-нибудь какие-либо предложения или кто-нибудь видел такое поведение раньше?

мы попробовали настройки cookie, периоды ожидания перед нашим запросом etc.

мы добавляем аутентификацию LinkedIn OAuth2 в Zotonic [1], но теперь застряли с нерабочим модулем.

[1] http://zotonic.com/

Edit:

кто-то упомянул о двух обсуждениях в LinkedIn. Теперь его ответ, К сожалению, исчез из обсуждения.

это ссылки:

https://developer.linkedin.com/forum/unable-verify-access-token

https://developer.linkedin.com/forum/unauthorized-invalid-or-expired-token-immediately-after-receiving-oauth2-token

Я пробовал все предложения в этих дискуссиях, но безрезультатно.

Edit #2:

проверка первого обсуждения в LinkedIn показывает, что я не единственный, кто имеет эту согласованность проблемы. Что-то в LinkedIn идет не так, если пользователь очистил куки или должен войти в LinkedIn во время OAuth "танец" https://developer.linkedin.com/forum/unable-verify-access-token#comment-36950

обновление

решено, благодаря Matthijs Bierman, см. ответы ниже.

10 ответов


мы говорили по телефону, оказывается, вы столкнулись с той же проблемой, что и здесь. LinkedIn не принимает Authentication заголовок и ожидает параметр запроса:oauth2_access_token.


для меня https://api.linkedin.com/v1/people -~?format=json&oauth2_access_token=[accessToken] не сработало.

добавление заголовка reguest

авторизация: предъявитель [accessToken]

не работал, пока я не прошел через связанный в sdk и не протестировал и не узнал, что они также требуют, чтобы вы добавили заголовок запроса

x-li-src: msdk

с этими двумя заголовками вызов https://api.linkedin.com/v1/people -~?format=json работал.

надеюсь, Linkedin исправит это недокументированное требование в ближайшее время...


С помощью Matthijs Bierman мы нашли решение нашей проблемы.

мы с проверкой подлинности с . Если мы используем oauth2_access_token аргумент запроса вместо этого работает в обоих случаях использования С и без подписанного пользователя LinkedIn.

Вывод: Не используйте авторизация заголовок и используйте oauth2_access_token аргумент запроса.


то же самое здесь, каждый раз, когда я получал новый access_token, мне приходилось ждать пару минут, пока он не будет действителен. Это было неприемлемо.

Я посмотрел, как разные сайты делают вход с LinkedIn, и вот решение, которое сработало для меня.

при обмене AUTH_CODE для получения ACCESS_TOKEN используйте метод GET вместо POST, например:

GET https://www.linkedin.com/oauth/v2/accessToken?client_id=yourClientId&client_secret=yourClientSecret&grant_type=authorization_code&redirect_uri=http%3A%2F%2Flocalhost%3A8080%2FlinkedInLogin&code=AQQGx11-p1uaQWz2YBWHBcskaGrVrEDeFUo4O2vjolFaKaQ89UhGlR27_yDACNLoxDmYi7AR5sCplwsHLD_ERAVsscFozo-qRl032aFnj2UcUoPjCfo

интеграция Grails с LinkedIn OAuth2 образец: https://github.com/rgrebski/samples/tree/master/grails-linkedin-integration


AccessToken из Mobile SDK дает эту ошибку:

вы не столкнетесь с какой-либо проблемой с accessTokens генерируется с помощью web OAuth 2.0 протокол. Эта проблема возникает только с mobile (iOS/Android) SDK, когда accessToken используется back-end для получения сведений о пользователе.

решение: укажите ниже 2 заголовков

  1. авторизация
  2. x-li-src (пропустить для интернета)

для пример:

URL-адрес: https://api.linkedin.com/v1/people -~?формат=json

(С):
Authorization: Bearer AQVYqTNB3bFRAIatBcp4hM1r-......

x-li-src:  msdk 

Примечание:

Если AccessToken генерируется с помощью OAuth 2.0, вы можете использовать тот же api, удалив только второй заголовок(x-li-src) .


Я вижу эту же проблему; однако запрос param не работает для меня.

Он характеризуется так же, как описанный вопрос: 1) у меня есть действительный маркер 2) пользователь выходит из linkedin 3) запрос Профиль пользователя не 4) подождите пять минут, и это удастся

вы можете увидеть мой запрос / ответ ниже:

$ curl -v  "https://api.linkedin.com/v1/people/~?format=json&oauth2_access_token=$LI_AT"
* Hostname was NOT found in DNS cache
*   Trying 108.174.10.12...
* Connected to api.linkedin.com (108.174.10.12) port 443 (#0)
* TLS 1.2 connection using TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
* Server certificate: tablet.linkedin.com
* Server certificate: DigiCert SHA2 Secure Server CA
* Server certificate: DigiCert Global Root CA
> GET /v1/people/~?format=json&oauth2_access_token=[**obscurred for security sake**] HTTP/1.1
> User-Agent: curl/7.37.1
> Host: api.linkedin.com
> Accept: */*
> 
< HTTP/1.1 401 Unauthorized
* Server Apache-Coyote/1.1 is not blacklisted
< Server: Apache-Coyote/1.1
< x-li-request-id: LZ2X5Y9DCC
< Date: Thu, 20 Aug 2015 16:12:52 GMT
< Vary: *
< x-li-format: json
< Content-Type: application/json;charset=UTF-8
< Content-Length: 142
< X-Li-Fabric: prod-ltx1
< Connection: keep-alive
< X-Li-Pop: prod-lva1
< X-LI-UUID: lS7xYKc3/BNAj0nmNSsAAA==
< Set-Cookie: lidc="b=TB76:g=111:u=47:i=1440087172:t=1440094069:s=AQHPHzjyg93X3bnT8KuNvThuwQo5buSS"; Expires=Thu, 20 Aug 2015 18:07:49 GMT; domain=.linkedin.com; Path=/
< 
{
  "errorCode": 0,
  "message": "Unable to verify access token",
  "requestId": "LZ2X5Y9DCC",
  "status": 401,
  "timestamp": 1440087172914
* Connection #0 to host api.linkedin.com left intact
}

Я пробовал все вышеперечисленные решения, но не работал со мной. Я изменил свой url с

https://www.linkedin.com/oauth/v2/ 

to

https://www.linkedin.com/uas/oauth2/

он нормально работал.


аутентифицированное состояние пользователя на LinkedIn.com (независимо от того, вошли ли они в систему) не влияет на действительный маркер доступа OAuth. Другими словами, пользователь может выйти из LinkedIn.com и этот токен должен работать до тех пор, пока он не будет отозван или истек.

есть ли вероятность, что вы генерируете новый маркер? Это сделало бы предыдущий недействительным. Это сообщение об ошибке, которым вы поделились, обычно вызывается, когда токен был обновлен, и вы делаете Вызов API с предыдущим токеном


ничего из вышеперечисленного не сработало для меня. Кто-нибудь знает, есть ли решение для этого? иногда работает и иногда не без каких-либо изменений кода.


https://api.linkedin.com/v1/people/~?format=json&oauth2_access_token=<token>

по умолчанию это ответ return в XML, добавляющий format=json.