2015-05-06 8 views
5

Quello che sto cercando di realizzare:Android LinkedIn SDK produce token di accesso inutilizzabili

  • Autentica w/LinkedIn tramite il loro Android SDK
  • Fetch profilo di utente per ottenere la loro userId
  • Crea nuovo utente contro il nostro interno servizio

Finora sono stato in grado di autenticare con LinkedIn, recuperare un token di accesso e utilizzarlo contro il servizio di LinkedIn per ottenere il proprio ID utente.

Il flusso sembra un po 'come questo

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

al ritorno nella mia applicazione Io prendo i dati Intent usando il codice seguente

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

questa parte sembra essere funzionale e produce un onAuthSuccess da AuthListener impostazione nell'inizializzazione LISessionManager.

dopo il successo sono in grado di utilizzare il token di accesso fornita con il previsto APIHelper per ottenere il profilo di base dell'utente

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

questo in realtà ritorna con successo con le informazioni di base del profilo utente.

questo è dove gli esseri problema posso solo usare questo token di accesso per effettuare chiamate utilizzando il APIHelper. Quando si tenta di utilizzare il token di accesso fornito altrove (lato server, testing in Postman/Apigee) restituisce sempre questa risposta.

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

Sono stato utilizzando la risorsa LinkedIn per il debug 401 numeri (https://developer.linkedin.com/docs/oauth2) Utilizzo del LISessionManager. per valutare la sessione corrente mi dice che il token di accesso è

  • ancora valido
  • non è scaduto
  • è ancora buono per circa 2 mesi dal momento in cui viene emesso.

Controllo il mio profilo LinkedIn, non ha revocato l'accesso all'applicazione e alla portata permesso è basic_profile, email_address, e w_share

Sono molto confuso perché questi accessTokens generati non sembrano essere validi al di fuori dell'SDK di LinkedIn, non sono validi in tutto il servizio?

Qualsiasi aiuto apprezzato.

risposta

5

Come indicato nella documentazione di autenticazione Android SDK di LinkedIn (https://developer.linkedin.com/docs/android-sdk-auth),

mobile vs. token di accesso sul lato server

E 'importante notare che i token di accesso che vengono acquisiti tramite l'SDK di telefonia mobile stanno utilizzabile solo con Mobile SDK e non può essere utilizzato per effettuare chiamate API REST lato server.

Analogamente, i token di accesso che sono già stati memorizzati dagli utenti che sono stati autenticati utilizzando una chiamata API REST lato server non funzioneranno con Mobile SDK.

+0

Grazie per la rapida risposta, Justin! Se l'avessi scoperto. Apprezzo l'aiuto. – 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

Mentre LinkedIn afferma che non è possibile utilizzare un token di accesso fornito dal Mobile SDK per effettuare chiamate API server-side, sono stato in grado di fare tali chiamate solo con l'aggiunta x-li-src: msdk nell'intestazione di la richiesta.