Android LinkedIn SDK生成无法访问的令牌

时间:2015-05-06 15:04:14

标签: android sdk linkedin

我想要完成的任务:

  • 通过Android SDK
  • 对LinkedIn进行身份验证
  • 获取用户的个人资料以获取他们的userId
  • 针对我们的内部服务创建新用户

到目前为止,我已经能够通过LinkedIn进行身份验证,检索访问令牌,并使用针对LinkedIn的服务来获取用户ID。

流程看起来有点像这样

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

返回我的应用程序后,我使用下面的代码捕获Intent数据

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

此部分似乎正常运行,并从 LISessionManager 初始化中的 AuthListener 设置产生 onAuthSuccess

发布成功我可以使用提供的 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之外似乎没有效果,它们在整个服务中无效吗?

任何帮助表示感谢。

3 个答案:

答案 0 :(得分:5)

如LinkedIn的Android SDK身份验证文档(https://developer.linkedin.com/docs/android-sdk-auth)中所述,

  

移动与服务器端访问令牌

     

请务必注意,通过Mobile SDK获取的访问令牌仅可用于Mobile SDK,并且不能用于进行服务器端REST API调用。

     

同样,您已经从使用服务器端REST API调用进行身份验证的用户存储的访问令牌将无法与Mobile SDK一起使用。

答案 1 :(得分:3)

虽然LinkedIn声明无法使用Mobile SDK提供的访问令牌进行服务器端API调用,但我只能通过在请求标头中添加x-li-src: msdk来进行此类调用

答案 2 :(得分: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());
        }
    });
}