Autenticando com OAuth LinkedIn – PHP+
À partir do dia 01 de Maio de 2019 o método antigo do Linkedin de fazer login em seu site será descontinuado e não funcionará mais, visualizando esta situação montei essa explicação para que vocês consigam entender e aplicar o novo método utilizado por eles.
Primeiro passo:
Para iniciar é necessário criar um aplicativo no Linkedin
Se você já tiver o aplicativo é necessário acessa-lo e modifica-lo
Entre na opção “Auth” e configure o link de retorno do aplicativo.
Esse link é necessário para que o sistema de login funcione corretamente.
Cada aplicativo recebe um ID exclusivo, reserve-o pois iremos utilizar.
O Client Secret recomendamos não revelar a ninguém.
Segundo Passo:
Após tudo isso começamos a programar, criamos primeiro o link de login:
<a href="https://www.linkedin.com/uas/oauth2/authorization?response_type=code&client_id=XXXXX&redirect_uri=XXXXXXX&state=987654321&scope=r_liteprofile">CONECTAR COM O LINKEDIN</a>
client_id = Seu id pego no primeiro passo
redirect_uri = O link colocado no primeiro passo (recomendamos colocar o link com a pagina php que estamos criando)
Terceiro passo:
Após a pessoa clicar no link ela será redirecionada para a pagina do linkedin onde autorizará o acesso, após isso o linkedin redicionará a pessoa para o link colocado no redirect_uri com o CODE, e com esse get faremos o acesso.
Simulando que a pessoa já autorizou faremos a parte onde com o CODE pegamos o ACCESS TOKEN que agora sim com esse acesso conseguimos acessar os dados da pessoa.
$curl = curl_init(); curl_setopt_array($curl, [ CURLOPT_RETURNTRANSFER => 1, CURLOPT_URL => 'https://www.linkedin.com/uas/oauth2/accessToken?grant_type=authorization_code&code='.$_GET['code'].'&redirect_uri=[link do passo 1]&client_id=[id do passo 1]&client_secret=[secreto do passo 1]', CURLOPT_POST => 1, CURLOPT_POSTFIELDS => [ grant_type => 'authorization_code', code => $_GET['code'], redirect_uri => '[link do passo 1]', client_id => '[id do passo 1]', client_secret => '[secreto do passo 1]' ] ]); $response = curl_exec($curl); curl_close($curl);
com o ACCESS TOKEN em mãos faremos a requisição dos dados da pessoa:
$access_Token = json_decode($response); if ($access_Token->access_token){ //header $request_headers = array(); $request_headers[] = 'Authorization: Bearer '.$access_Token->access_token; $request_headers[] = 'cache-control: no-cache'; $request_headers[] = 'X-Restli-Protocol-Version: 2.0.0'; //nome, foto $curl = curl_init(); curl_setopt_array($curl, [ CURLOPT_HEADER => 0, CURLOPT_RETURNTRANSFER => 1, CURLOPT_HTTPHEADER => $request_headers, CURLOPT_URL => 'https://api.linkedin.com/v2/me?projection=(id,firstName,lastName,profilePicture(displayImage~:playableStreams))' ]); $response = curl_exec($curl); curl_close($curl); //pega os dados $json_output = json_decode($response, true); $nome = $json_output["firstName"]["localized"]["pt_BR"].' '.$json_output["lastName"]["localized"]["pt_BR"]; $id = $json_output["id"]; $foto = $json_output["profilePicture"]["displayImage~"]["elements"][3]["identifiers"][0]["identifier"]; echo $id.'<br>'; echo $nome.'<br>'; echo $foto.'<br>'; }
Código completo:
acesso.php
<? $vurl = "url do passo 1"; $vclientid = "id do client, passo 1"; $vsecreto = "secreto do passo 1"; ?> <a href="https://www.linkedin.com/uas/oauth2/authorization?response_type=code&client_id=<?=$vclientid?>&redirect_uri=<?=vurl?>&state=987654321&scope=r_liteprofile">CONECTAR COM O LINKEDIN</a> <? //PARTE 2 if ($_GET['code']){ $curl = curl_init(); curl_setopt_array($curl, [ CURLOPT_RETURNTRANSFER => 1, CURLOPT_URL => 'https://www.linkedin.com/uas/oauth2/accessToken?grant_type=authorization_code&code='.$_GET['code'].'&redirect_uri='.$vurl.'&client_id='.$vclientid.'&client_secret='.$vsecreto, CURLOPT_POST => 1, CURLOPT_POSTFIELDS => [ grant_type => 'authorization_code', code => $_GET['code'], redirect_uri => $vurl, client_id => $vclientid, client_secret => $vsecreto ] ]); $response = curl_exec($curl); curl_close($curl); //PARTE 3 $access_Token = json_decode($response); if ($access_Token->access_token){ //header $request_headers = array(); $request_headers[] = 'Authorization: Bearer '.$access_Token->access_token; $request_headers[] = 'cache-control: no-cache'; $request_headers[] = 'X-Restli-Protocol-Version: 2.0.0'; //nome, foto $curl = curl_init(); curl_setopt_array($curl, [ CURLOPT_HEADER => 0, CURLOPT_RETURNTRANSFER => 1, CURLOPT_HTTPHEADER => $request_headers, CURLOPT_URL => 'https://api.linkedin.com/v2/me?projection=(id,firstName,lastName,profilePicture(displayImage~:playableStreams))' ]); $response = curl_exec($curl); curl_close($curl); $json_output = json_decode($response, true); $nome = $json_output["firstName"]["localized"]["pt_BR"].' '.$json_output["lastName"]["localized"]["pt_BR"]; $id = $json_output["id"]; $foto = $json_output["profilePicture"]["displayImage~"]["elements"][3]["identifiers"][0]["identifier"]; echo $nome.'<br>'; echo $id.'<br>'; echo $foto.'<br>'; } }