LinkedIn oAuth2 无法获取任何数据

LinkedIn oAuth2 can't get any data

我通过 api 中的链接成功使用了 oAuth v2。

它给了我一个这样的访问令牌:

access_token: "AQUqvUuTXuQ2_Tr9NutHYlQQEDhiTtkHb5Jn5ozgvDfhXzu4l-TP9pE07VqYiH4QTjijzwWFa28tdmjflrtNG3ycyxNAdVx0WsWl9LcfZMSyYqSfBQjtaWtkF4WzoDoxomS7J0b0m-1avrWbsvU3ZpPc388ACtN3d2wCKgK6CXFXoHNMiz4tnHnKhtjU-yzvnFJDRTSHKKBu4lt1zZZ0hr33w-SsXqh4hAZNHxUu6s2itR85RV1cT17_EfHt2UiqeS7wB7_udxxIEYxSOk5GvdXRT5txDveKLjMs1rMhxHf72JcAoGAoxDSQXK2ek2KcFgYOcJ6Zg5L5pDImfjls4mSGWFnU-w"
​
del: function mkHttp()
​
expires_in: 5183999
​
get: function mkHttp()​
me: function mkHttpMe()​
patch: function mkHttp()​
post: function mkHttp()
​
provider: "linkedin2"
​
put: function mkHttp()​
toJson: function toJson()​
<prototype>: Object { … }

但是,不幸的是,在我通过身份验证后,我无法成功执行简单的 get 查询。

这是我第一次 jquery 尝试 :

$(function(){
     $('#linkedin-button').on('click', function() {

        // Initialize with your OAuth.io app public key
        OAuth.initialize('MYKEYISOK');

        // Use popup for oauth
        OAuth.popup('linkedin2').done(function(result) {

            $.get( "https://api.linkedin.com/v2/me", function( data ){
              console.log(data),
            });
        })

      })

});

这是 $.get firefox 控制台错误:

{"serviceErrorCode":65604,"message":"Empty oauth2 access token","status":401}

这是我第二次尝试没有 jquery :

result.get( "http://api.linkedin.com/v1/companies/1441/updates", function( data ) {
console.log(data);
});

也不行。

这是我的第 3 次尝试:

$.ajax({
    url: 'https://api.linkedin.com/v2/me',
    headers: {
         'access_token':result.access_token

    },
    method: 'GET',
    dataType: 'json',

    success: function(data){
      console.log('succes: '+data);
    }
  });

这是我的第 4 次尝试,现在看来有效了:

  $.ajax({
    url: 'https://api.linkedin.com/v2/me?oauth2_access_token='+result.access_token,

    method: 'GET',
    dataType: 'json',

    success: function(data){
      console.log('succes: '+data);
    }
  });

但我遇到了一个新错误:

{"serviceErrorCode":100,"message":"Not enough permissions to access: GET /me","status":403} 

这是解释:

在授权的第一步中使用 r_liteProfile 而不是 r_basicprofile。使用这个accessToken解决了我所有的问题,太棒了!

我是否将 OAuthv2 设置与 GET 查询一起发送,使其正常工作?

那里有一些信息: https://docs.microsoft.com/en-us/linkedin/shared/authentication/authorization-code-flow?context=linkedin/context#step-4-make-authenticated-requests

确保您使用了以下范围。

r_liteprofile,r_emailaddress,w_member_social

下面的代码将向您发送授权流程

$params = array('response_type' => 'code',
            'client_id' => $this->api_key,
            'scope' => $this->scope,//r_liteprofile,r_emailaddress,w_member_social
            'state' => uniqid('', true), // unique long string
            'redirect_uri' => 'redirect url',
        );
        // Authentication request
        $url = 'https://www.linkedin.com/oauth/v2/authorization?' . http_build_query($params);

接收访问令牌使用下面的代码

$params = array('grant_type' => 'authorization_code',
        'client_id' => $this->api_key,
        'client_secret' => $this->api_secret,
        'code' => $_GET['code'],
        'redirect_uri' => base_url().$this->redirect,
    );
    // Access Token request
    $url = 'https://www.linkedin.com/oauth/v2/accessToken?' . http_build_query($params);
    $data_len = strlen(http_build_query($params));
    // Tell streams to make a POST request
    $context = stream_context_create(
            array('http' =>
                array('method' => 'POST','header'=> 'Content-Length: 0'
                )
            )
    );

    // Retrieve access token information
    $response = file_get_contents($url, false, $context);
    $token = json_decode($response);
    return $token->access_token;