LinkedIn oAuth2 не может получить данные - PullRequest
1 голос
/ 17 мая 2019

Я успешно использую oAuth v2 со связанными в API.

linkedin success authv2

это дает мне токен доступа, подобный этому:

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);
});

она тоже не работает.

Это моя третья попыткаout:

$.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} 

Этоэто объяснение: Любые запросы к api.linkedin.com/v2/ возвращают «Недостаточно разрешений для доступа ...»

Используйте 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

1 Ответ

0 голосов
/ 17 мая 2019

Убедитесь, что вы использовали следующие области.

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;
...