Cliente OAuth para PHP: autenticação via redes sociais e API

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Cliente OAuth para PHP: guia completo de integração de autenticação

\n\n

OAuth (Open Authorization) é um protocolo de autorização aberto que permite conceder a terceiros acesso limitado aos recursos do usuário sem transferir login e senha. No mundo PHP, existem várias bibliotecas para implementar OAuth 2.0, mas uma das mais populares e suportadas é a League\\OAuth2-Client (The PHP League). Esta biblioteca oferece uma forma flexível e segura de integrar login via Google, Facebook, GitHub, VK (VKontakte), Yandex e muitos outros serviços.

\n\n

Neste artigo, abordaremos detalhadamente a instalação, configuração e uso do cliente OAuth para PHP com exemplos de autenticação via Google e VK. Você aprenderá como obter access token, refresh token e dados do perfil do usuário.

\n\n

Instalação do cliente OAuth via Composer

\n\n

Para começar, é necessário instalar a biblioteca principal e os provedores (adaptadores para serviços específicos). Execute no terminal:

\n\n
composer require league/oauth2-client\ncomposer require league/oauth2-google\ncomposer require league/oauth2-vk
\n\n

A biblioteca suporta PSR-7 (mensagens HTTP) e PSR-18 (cliente HTTP), portanto, também é recomendado instalar o Guzzle ou qualquer outro cliente HTTP compatível:

\n\n
composer require guzzlehttp/guzzle
\n\n

Arquitetura básica do OAuth 2.0

\n\n

O OAuth 2.0 em PHP funciona da seguinte forma:

\n
    \n
  • Client ID e Client Secret — obtidos ao registrar o aplicativo no serviço (Google Cloud Console, VK Developers, etc.).
  • \n
  • Redirect URI — URL no seu site para onde o serviço redirecionará o usuário após a autorização.
  • \n
  • Authorization Code — código temporário que é trocado por um access token.
  • \n
  • Access Token — chave para acessar a API do usuário.
  • \n
  • Refresh Token — permite renovar o access token sem nova autorização.
  • \n
\n\n

Exemplo: login via Google

\n\n

Vamos criar um manipulador simples para autenticação via Google. Presume-se que você já tenha client_id e client_secret.

\n\n

Passo 1. Redirecionar o usuário para a página de autorização do Google

\n\n
<?php\nrequire 'vendor/autoload.php';\n\n$provider = new \\League\\OAuth2\\Client\\Provider\\Google([\n    'clientId'     => 'SEU_CLIENT_ID',\n    'clientSecret' => 'SEU_CLIENT_SECRET',\n    'redirectUri'  => 'https://seu-site.com.br/callback.php',\n]);\n\n// Gera a URL de autorização\n$authUrl = $provider->getAuthorizationUrl([\n    'scope' => ['email', 'profile'], // permissões solicitadas\n]);\n\n// Salva o state na sessão para proteção contra CSRF\n$_SESSION['oauth2state'] = $provider->getState();\n\nheader('Location: ' . $authUrl);\nexit;
\n\n

Passo 2. Processamento do callback (callback.php)

\n\n
<?php\nsession_start();\nrequire 'vendor/autoload.php';\n\n$provider = new \\League\\OAuth2\\Client\\Provider\\Google([\n    'clientId'     => 'SEU_CLIENT_ID',\n    'clientSecret' => 'SEU_CLIENT_SECRET',\n    'redirectUri'  => 'https://seu-site.com.br/callback.php',\n]);\n\n// Verifica o state para prevenir ataques CSRF\nif (empty($_GET['state']) || ($_GET['state'] !== $_SESSION['oauth2state'])) {\n    unset($_SESSION['oauth2state']);\n    exit('State inválido');\n}\n\ntry {\n    // Troca o authorization code por um access token\n    $accessToken = $provider->getAccessToken('authorization_code', [\n        'code' => $_GET['code']\n    ]);\n\n    // Obtém os dados do perfil do usuário\n    $resourceOwner = $provider->getResourceOwner($accessToken);\n    $user = $resourceOwner->toArray();\n\n    echo "Olá, " . htmlspecialchars($user['name']) . "!";\n    echo "Email: " . htmlspecialchars($user['email']);\n    // Salva o token no banco de dados para                    

Recommendations