Cliente OAuth para PHP: guia completo de integração
No desenvolvimento web moderno, o OAuth (Open Authorization) tornou-se o padrão de facto para organizar login através de serviços terceiros. O cliente OAuth para PHP permite que seus usuários façam login no site através de contas Google, GitHub, VK e outros provedores, sem a necessidade de criar um registro separado.
Neste artigo, vamos explorar a popular biblioteca PHP League OAuth2 Client, que fornece uma interface unificada para trabalhar com diversos provedores OAuth2.
O que é OAuth2 e por que ele é necessário?
OAuth2 é um protocolo de autorização que permite delegar o acesso aos recursos do usuário. Em vez de armazenar senhas de serviços terceiros, você recebe um token de acesso temporário. As principais vantagens são:
- Segurança — as senhas dos usuários não são transmitidas para sua aplicação
- Conveniência — os usuários fazem login com um clique
- Confiança — menor risco de vazamento de dados
- Dados adicionais — é possível obter email, nome, avatar e outras informações
Instalação da biblioteca League OAuth2 Client
Para trabalhar com OAuth2 em PHP, recomenda-se usar o pacote oficial league/oauth2-client. A instalação é feita via Composer:
composer require league/oauth2-clientPara provedores específicos, serão necessários pacotes adicionais. Por exemplo:
composer require league/oauth2-google # Googlecomposer require league/oauth2-github # GitHubcomposer require digitalcloud/oauth2-vk # VK (não oficial)Arquitetura básica do cliente OAuth2
Qualquer cliente OAuth2 funciona de acordo com o seguinte esquema:
- O usuário clica no botão "Entrar com provedor"
- Sua aplicação redireciona o usuário para a página de autorização do provedor
- O usuário confirma o acesso
- O provedor retorna um código de autorização para seu callback-URI
- Sua aplicação troca o código por um token de acesso
- Com o token, você obtém os dados do usuário da API do provedor
Exemplo de integração com Google
Vamos considerar um exemplo completo funcional para autorização via Google. Primeiro, crie um projeto no Google Cloud Console e obtenha o Client ID e o Client Secret.
Estrutura de arquivos:
config.php— configurações da aplicaçãologin.php— página de logincallback.php— manipulador da resposta do Google
config.php
<?php// Configurações OAuth para Googledefine('GOOGLE_CLIENT_ID', 'seu_client_id.apps.googleusercontent.com');define('GOOGLE_CLIENT_SECRET', 'seu_client_secret');define('GOOGLE_REDIRECT_URI', 'https://seu-site.com.br/callback.php');
// Inclui a bibliotecarequire_once 'vendor/autoload.php';
use League\\OAuth2\\Client\\Provider\\Google;
// Cria o provedor$provider = new Google([ 'clientId' => GOOGLE_CLIENT_ID, 'clientSecret' => GOOGLE_CLIENT_SECRET, 'redirectUri' => GOOGLE_REDIRECT_URI,]);?>login.php
<?phprequire_once 'config.php';
// Gera a URL para autorização$authUrl = $provider->getAuthorizationUrl([ 'scope' => ['email', 'profile'], // solicita email e perfil]);
// Salva o state para proteção contra ataques CSRF$_SESSION['oauth2state'] = $provider->getState();
// Redireciona o usuárioheader('Location: ' . $authUrl);exit;?>
<!-- Alternativamente: botão em HTML --><a href="<?= htmlspecialchars($authUrl) ?>">Entrar com Google</a>