2015-05-06 38 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请求。