Cliente OAuth para Java: ScribeJava e Spring Security OAuth2
No desenvolvimento web moderno, a integração com serviços externos através do protocolo OAuth 2.0 tornou-se o padrão de facto. Seja para login via Google, GitHub, Facebook ou acesso a APIs de plataformas terceiras — o desenvolvedor Java precisa de uma ferramenta confiável para trabalhar com OAuth. Neste artigo, abordaremos detalhadamente duas bibliotecas principais: ScribeJava (leve e versátil) e Spring Security OAuth2 (parte do ecossistema Spring). Você aprenderá como escolher a ferramenta adequada e implementar um cliente OAuth em Java.
O que é um cliente OAuth e para que serve?
Um cliente OAuth é um componente de software que permite que sua aplicação (cliente) acesse com segurança os recursos do usuário em um servidor terceiro (provedor) sem transmitir a senha. Em vez disso, utiliza-se a troca de tokens de acesso. Em Java, isso é implementado através de bibliotecas especializadas que lidam com toda a complexidade do protocolo: geração da URL de autorização, processamento do callback, obtenção e renovação de tokens.
1. ScribeJava — Cliente OAuth leve e independente
ScribeJava (anteriormente Scribe) é uma biblioteca minimalista, porém poderosa, para OAuth 1.0a e OAuth 2.0. Ela não está vinculada a frameworks, o que a torna ideal para microsserviços, aplicações Java comuns ou Android. Principais vantagens:
- Suporte a dezenas de provedores "prontos para uso" (Google, Facebook, GitHub, VK, Yandex e outros)
- API simples e intuitiva
- Sem dependências desnecessárias
- Suporte a PKCE (Proof Key for Code Exchange) para clientes públicos
Exemplo: Autorização via GitHub com ScribeJava
Vamos considerar um cenário básico — obter um access token do GitHub. Primeiro, adicione a dependência no pom.xml:
<dependency> <groupId>com.github.scribejava</groupId> <artifactId>scribejava-apis</artifactId> <version>8.3.3</version></dependency>Agora, o código do cliente OAuth:
import com.github.scribejava.apis.GitHubApi;import com.github.scribejava.core.builder.ServiceBuilder;import com.github.scribejava.core.model.OAuth2AccessToken;import com.github.scribejava.core.model.OAuthRequest;import com.github.scribejava.core.model.Response;import com.github.scribejava.core.model.Verb;import com.github.scribejava.core.oauth.OAuth20Service;
public class GitHubOAuthExample { public static void main(String[] args) throws Exception { final String clientId = "seu_client_id"; final String clientSecret = "seu_client_secret"; final String callbackUrl = "http://localhost:8080/callback";
// Criando o serviço OAuth 2.0 OAuth20Service service = new ServiceBuilder(clientId) .apiSecret(clientSecret) .callback(callbackUrl) .scope("user:email") // solicitando acesso ao email .build(GitHubApi.instance());
// Passo 1: Obter a URL para redirecionar o usuário final String authorizationUrl = service.getAuthorizationUrl(); System.out.println("Acesse o link para autorização: " + authorizationUrl);
// Passo 2: Após o redirecionamento, extrair o código do callback // (normalmente isso é feito em um controller, aqui como exemplo — entrada pelo console) System.out.print("Digite o código do callback: "); java.util.Scanner scanner = new java.util.Scanner(System.in); String code = scanner.nextLine();
// Passo 3: Trocar o código pelo access token OAuth2AccessToken accessToken = service.getAccessToken(code); System.out.println("Access Token: " + accessToken.getAccessToken());
// Passo 4: Usar o token para fazer uma requisição à API OAuthRequest request = new OAuthRequest(Verb.GET, "https://api.g Também na biblioteca
Autorização e Autenticação em JavaScript (Node.js): Guia Completo
ErrorOr para C# (.NET): guia completo com exemplos práticos