2015-01-22 6 views
7

Es funktioniert wenn und nur wenn der Benutzer in LinkedIn zum Zeitpunkt der OAuth2-Anfrage angemeldet ist.LinkedIn OAuth2: "Zugriffs-Token kann nicht überprüft werden"

Wenn der Benutzer nicht angemeldet ist, tritt ein Fehler auf.

Sequenz unseres Handeln:

  • erfolgreich die frischen Zugriffstoken
  • mit dem Zugriffstoken, Post an den api Endpunkt https://api.linkedin.com/v1/people/\~

Danach holen wir erhalten ein 401 mit folgenden Inhalt:

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

Manchmal, nach Som Die Zeit verging, eine Wiederholung mit dem gleichen Access Token ergibt 200. Manchmal nicht.

Wenn sich der Benutzer während dieser "401-Periode" bei LinkedIn anmeldet, beginnt das zuvor abgerufene Zugriffstoken auf magische Weise zu funktionieren.

Ich bin nicht in der Lage, dies zu lösen, da es ein Problem bei LinkedIn scheint.

Hat jemand irgendwelche Vorschläge oder hat jemand dieses Verhalten vorher gesehen?

Wir haben versucht, die Cookie-Einstellungen, Wartezeiten vor unserer Anfrage usw.

Wir LinkedIn OAuth2 Authentifizierung Zotonic hinzufügen [1], sind aber jetzt mit einem nicht funktionierenden Modul stecken.

[1] http://zotonic.com/

Edit:

Jemand bezeichnet zwei Diskussionen auf LinkedIn. Seine Antwort ist nun leider aus der folgenden Diskussion verschwunden.

Dies sind die Verbindungen:

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

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

ich alle Vorschläge in diesen Diskussionen versucht haben, ohne Erfolg.

Edit # 2:

die erste Diskussion auf LinkedIn Überprüfung zeigt, dass ich bin nicht der einzige, diese Konsistenz Fragen. Etwas bei LinkedIn läuft falsch, wenn der Nutzer Cookies gelöscht hat oder muss LinkedIn während des OAuth „Tanz“ unterzeichnen, in https://developer.linkedin.com/forum/unable-verify-access-token#comment-36950

aktualisieren

gelöst, dank Matthijs Bierman finden Sie Antworten unten.

Antwort

1

machen Wir haben am Telefon gesprochen, stellt sich heraus, dass Sie in das gleiche Problem wie here laufen . LinkedIn akzeptiert den Header Authentication nicht und erwartet einen Anforderungsparameter: oauth2_access_token.

+2

In der Tat ist das Problem ähnlich. Es scheint, dass die Autorisierungskopfzeile und das Zugriffstokenabfrageargument unterschiedlich gehandhabt werden. Verwirrend, dass die LinkedIn-Beispiele den Authorization-Header verwenden. –

+0

Ich versuche das im Jahr 2017 und es funktioniert nicht mehr. Ich habe versucht, wie die Dokumente sagen (https://developer.linkedin.com/docs/oauth2), mit Autorisierung: Bearer {access_token} und Abfrage mit oauth2_access_token = {access_token), beide ohne Erfolg. nach einigen Minuten funktioniert das aber. hat jemand mehr Infos? Es scheint eine mögliche Konsistenz auf ihrer Seite zu sein. – mwm

0

Der authentifizierte Status des Benutzers auf LinkedIn.com (unabhängig davon, ob er angemeldet ist oder nicht) hat keinen Einfluss auf ein gültiges OAuth-Zugriffstoken.Mit anderen Worten, der Benutzer kann sich von LinkedIn.com abmelden, und dieses Token sollte weiterhin funktionieren, bis es entweder gesperrt oder abgelaufen ist.

Gibt es eine Möglichkeit, dass Sie ein neues Token generieren? Das würde den vorherigen ungültig machen. Diese Fehlermeldung, die Sie freigegeben haben, wird normalerweise verursacht, wenn ein Token aktualisiert wurde und Sie einen API-Aufruf mit dem vorherigen Token

+0

Hallo Kamyar, ich folge den Schritten bei https://developer.linkedin.com/documents/authentication Das ist mir ein neues Access-Token jedes Mal, wenn der Benutzer sich gegen LinkedIn authentifiziert. Der Unterschied zwischen der Anmeldung bei LinkedIn und nicht bei drei verschiedenen Personen mit unterschiedlichen Browsern wurde beobachtet. In dem Moment, in dem wir einen OAuth-Dialog erhalten, in dem wir bei LinkedIn E-Mail/Passwort eingeben müssen, erhalten wir die oben genannten Fehler. Ich habe auch neben unserem System Locken verwendet, um zu überprüfen, ob es ein anhaltendes Verbindungsproblem gibt. –

+0

Kamyar, hast du irgendwelche Vorschläge, die wir versuchen könnten? Im Moment mussten wir alle unsere Kunden und Mitglieder per E-Mail darüber informieren, dass wir aufgrund der erwähnten Probleme mit dem OAuth2-Prozess von LinkedIn keine LinkedIn-Authentifizierung verwenden können. –

2

Mit Hilfe von Matthijs Bierman haben wir eine Lösung für unser Problem gefunden.

Wir authentifiziert mit einem Authorization: Bearer .... Header. Wenn wir stattdessen ein Abfrageargument oauth2_access_token verwenden, dann funktioniert es in beiden Anwendungsfällen mit und ohne einen angemeldeten LinkedIn-Benutzer.

Fazit: nicht die Authorization Header verwenden und das stattdessen oauth2_access_token Abfrage-Argument verwenden.

1

Ich sehe das gleiche Problem; Der Abfrageparameter funktioniert jedoch nicht für mich.

Es ist einfach wie die Frage beschrieben gekennzeichnet: 1) Ich habe ein gültiges Token 2) Der Nutzer aus linkedin 3) Der Antrag für das Benutzerprofil nicht warten 5 Minuten 4) angemeldet ist und es gelingt

Sie können meine Anfrage/Antwort unten:

$ 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 
} 
+1

Sie generieren ein neues Token, wenn Sie eine Anfrage an Linkedin stellen. Wenn Sie versuchen, das alte Token zu verwenden, werden Sie ausfallen – asgaines

+0

Die Sache ist, ich erzeuge kein neues Token. Außerdem schlägt das neue Token manchmal nur für ungefähr 30 Sekunden fehl, dann beginnt es zu arbeiten; 30 Sekunden für eine Anmeldung sind jedoch nicht akzeptabel. –

12

Für mich ist die https://api.linkedin.com/v1/people/~?format=json&oauth2_access_token=[accessToken] nicht funktionierte.

Hinzufügen reguest Kopf

Berechtigung: Bearer [accessToken]

hat nicht funktioniert, bis ich durch in sdk verknüpft ging und getestet und herausgefunden, dass sie erfordern auch Sie Request-Header

hinzufügen x-li-src: msdk

Mit diesen beiden Headern hat der Aufruf https://api.linkedin.com/v1/people/~?format=json funktioniert.

Hoffentlich Linkedin behebt diese undokumentierte Anforderung bald ...

+0

Danke. Es klappt! –

+0

Vielen Dank! –

+0

Für mich funktioniert das nur mit Zugriffstoken, die von einem Android-Handy kommen und funktioniert nicht mit iOS-Einsen – Ben

2

Hier gilt das gleiche, wurde jedes Mal, wenn ich neue access_token bekomme ich paar Minuten warten musste, bis sie gültig war. Das war inakzeptabel.

Ich schaute mir an, wie verschiedene Seiten das SignIn mit LinkedIn machen und hier ist eine Lösung, die für mich funktionierte.

Wenn AUTH_CODE um access_token Verwendung GET-Methode anstelle von POST, zum Beispiel den Austausch zu erhalten:

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 Integration mit LinkedIn OAuth2 Beispiel: https://github.com/rgrebski/samples/tree/master/grails-linkedin-integration

+0

Das war wirklich das Problem in meinem Fall und sollte als mögliche Antwort auf das Problem zur Kenntnis genommen werden. –

+0

Das ist wahr. Wenn ich den Exchange-AuthCode zu AccessToken-Prozess von POST-Anforderung zu GET-Anforderung änderte, wird der 401-Fehler stummgeschaltet. –

1

ich alle oben genannten Lösungen ausprobiert, aber didn‘ t Arbeit mit mir. Ich änderte meine url von

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

zu

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

es richtig funktionierte.

0

Keine der oben genannten funktionierte für mich. Weiß jemand, ob es dafür eine Lösung gibt? manchmal funktioniert es und manchmal nicht ohne irgendeine Änderung des Codes.

0

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

standardmäßig ist es return response in XML, das Hinzufügen format=json.

Verwandte Themen