2015-05-06 3 views
5

Was ich versuche zu erreichen:Android LinkedIn SDK erzeugt unbrauchbar Zugriffstoken

  • Authentifizieren w/LinkedIn über ihre Android SDK
  • Profil des Benutzers holen ihre userId
  • Neuen Benutzer gegen unsere internen zu erhalten
  • Service

Bisher konnte ich mit LinkedIn authentifizieren, ein Zugriffstoken abzurufen und verwenden, die gegen LinkedIn Dienst ihre Benutzer-ID zu erhalten.

Der Fluss sieht ein bisschen wie diese

LISessionManager.getInstance(activity).init(this.activity.get(), permissionScope, 
      authLinkedInCallback, showDialogIfAppMissing); 

bei der Rückkehr in meine Anwendung zu fangen mir die Intent-Daten mit dem Code unten

LISessionManager.getInstance(activity).onActivityResult(activity, requestCode, resultCode, data); 

dieser Teil funktionsfähig zu sein scheint und ergibt einen onAuthSuccess von der AuthListener Setup in der LISessionManager Initialisierung.

Beitrag Erfolg Ich bin in der Lage den bereitgestellten Zugriffstoken mit dem mitgelieferten APIHelper zu verwenden, um die Benutzer-Grundprofil

String built = "https://api.linkedin.com/v1/people/~?format=json"; 
APIHelper.getInstance(activity.get()).getRequest(activity.get(), built, getProfileCallback); 

dies tatsächlich kehrt erfolgreich mit den grundlegenden Benutzerprofilinformationen zu erhalten.

das ist, wo das Problem Wesen ich nur dieses Zugriffstoken verwenden kann, um Anrufe zu tätigen mit dem APIHelper. Wenn versucht wird, das bereitgestellte Zugriffs-Token an anderer Stelle zu verwenden (serverseitig, Testen in Postman/Apigee), gibt es immer diese Antwort zurück.

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

Ich war für das Debuggen von 401 Fragen, die die LinkedIn Ressource mit (https://developer.linkedin.com/docs/oauth2) Mit dem LISessionManager. die aktuelle Sitzung zu bewerten sagt mir, dass die Zugriffstoken

  • noch gültig
  • wird ausgegeben für ca. 2 Monate ab dem Zeitpunkt nicht abgelaufen ist
  • ist immer noch gut ist.

Überprüfen mein LinkedIn-Profil, hat es keinen Zugriff auf die Anwendung widerrufen und die Erlaubnis Umfang ist basic_profile, email_address und w_share

ich wirklich bin verwirrt, warum diese erzeugt accessTokens scheinen nicht zu außerhalb des LinkedIn SDK gültig sein, sind sie nicht für den gesamten Service gültig?

Jede Hilfe wird geschätzt.

Antwort

5

Wie in LinkedIn Android SDK Authentifizierungs Dokumentation (https://developer.linkedin.com/docs/android-sdk-auth) erwähnt,

Mobil vs. serverseitige Zugriffstoken

Es ist wichtig, dass die Zugriffstoken zu beachten, die über das Mobile SDK erworben werden, sind Nur mit dem Mobile SDK verwendbar und kann nicht für serverseitige REST-API-Aufrufe verwendet werden.

Auf ähnliche Weise können Zugriffstoken, die Sie bereits von Ihren Benutzern gespeichert haben und die mit einem serverseitigen REST-API-Aufruf authentifiziert wurden, nicht mit dem Mobile SDK funktionieren.

+0

Danke für die schnelle Antwort, Justin! Sollte das erwischt haben. Schätze die Hilfe. – jtuchek

1
LISessionManager sessionManager = LISessionManager.getInstance(getApplicationContext()); 
LISession session = sessionManager.getSession(); 

boolean accessTokenValid = session.isValid(); 

String respon =""; 

if(accessTokenValid) { 
    String url = "https://api.linkedin.com/v1/people/~?format=json"; 
    //String url = "https://api.linkedin.com/v1/people/~:(id,first-name,last-name,picture-url)"; 
    APIHelper apiHelper = APIHelper.getInstance(getApplicationContext()); 
    apiHelper.getRequest("your activity", url, new ApiListener() { 
     @Override 
     public void onApiSuccess(ApiResponse apiResponse) { 
      respon = apiResponse.toString(); 
      Log.e("Response ", respon);       
     } 

     @Override 
     public void onApiError(LIApiError LIApiError) { 
      Log.e("error", LIApiError.toString()); 
     } 
    }); 
} 
1

Während LinkedIn heißt es, dass es nicht möglich ist, ein Zugriffstoken durch das Mobile SDK zu nutzen serverseitige API-Aufrufe zu machen, ich war in der Lage, solche Anrufe durch Zugabe von x-li-src: msdk im Header nur, um von die Anfrage.