2015-05-06 35 views
5

我試圖做到:的Android LinkedIn SDK產生無用的訪問令牌

  • 身份驗證W/LinkedIn通過安卓SDK
  • 獲取用戶的個人資料,以獲得他們的用戶id
  • 對我們內部創建新用戶服務

到目前爲止,我已經能夠通過LinkedIn進行身份驗證,檢索訪問令牌,並將其用於LinkedIn服務以獲取其用戶ID。

流量看起來回國後到我的應用程序有點像這樣

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

我用下面的代碼

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

這部分似乎是功能捕捉意向數據,併產生一個onAuthSuccessAuthListener安裝在LISessionManager初始化。

崗位上取得成功,我能夠使用所提供的訪問令牌與所提供的APIHelper得到用戶的基本輪廓

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

這其實與用戶的基本資料信息成功返回。

這是哪裏出了問題衆生我只能使用此訪問令牌,使使用APIHelper電話。當試圖在別處使用提供的訪問令牌時(服務器端,在Postman/Apigee中測試),它總是返回此響應。

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

我一直在使用LinkedIn的資源用於調試401個問題(https://developer.linkedin.com/docs/oauth2)使用LISessionManager。評估當前會話告訴我,訪問令牌是

  • 仍然有效
  • 沒有過期
  • 還是不錯的,從它發出的時間大約爲2個月。

檢查我的LinkedIn的個人資料,但並沒有撤銷訪問應用程序和權限範圍basic_profile,EMAIL_ADDRESS,並w_share

我真的很困惑,爲什麼這些產生accessTokens似乎不在LinkedIn SDK之外有效,它們在整個服務中無效嗎?

任何幫助表示讚賞。

回答

5

由於LinkedIn的Android SDK的認證文件(https://developer.linkedin.com/docs/android-sdk-auth)中指出,

手機與服務器端的訪問令牌

需要注意的是通過移動SDK獲取的訪問令牌是很重要僅適用於Mobile SDK,不能用於製作服務器端REST API調用。

同樣,使用服務器端REST API調用進行身份驗證的用戶已存儲的訪問令牌不適用於Mobile SDK。

+0

感謝您的快速響應,賈斯汀! 應該抓住那個。感謝幫助。 – 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

雖然LinkedIn指出,這是不可能使用由移動SDK提供了一個訪問令牌,使服務器端API調用,我能做出這樣的呼籲剛剛通過的報頭附加x-li-src: msdk請求。