Cliente OAuth para Java: ScribeJava y Spring Security OAuth2

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Cliente OAuth para Java: ScribeJava y Spring Security OAuth2



En el desarrollo web moderno, la integración con servicios externos a través del protocolo OAuth 2.0 se ha convertido en el estándar de facto. Ya sea para iniciar sesión con Google, GitHub, Facebook o acceder a la API de plataformas de terceros, un desarrollador Java necesita una herramienta confiable para trabajar con OAuth. En este artículo, analizaremos en detalle dos bibliotecas clave: ScribeJava (ligera y versátil) y Spring Security OAuth2 (parte del ecosistema Spring). Aprenderá cómo elegir la herramienta adecuada e implementar un cliente OAuth en Java.



¿Qué es un cliente OAuth y por qué es necesario?

Un cliente OAuth es un componente de software que permite que su aplicación (cliente) acceda de forma segura a los recursos del usuario en un servidor de terceros (proveedor) sin transmitir la contraseña. En su lugar, se utiliza un intercambio de tokens de acceso. En Java, esto se implementa a través de bibliotecas especializadas que manejan toda la complejidad del protocolo: generación de URL de autorización, procesamiento de callback, obtención y actualización de tokens.



1. ScribeJava — Cliente OAuth ligero e independiente

ScribeJava (anteriormente Scribe) es una biblioteca minimalista pero potente para OAuth 1.0a y OAuth 2.0. No está vinculada a frameworks, lo que la hace ideal para microservicios, aplicaciones Java estándar o Android. Ventajas clave:

  • Soporte para docenas de proveedores "listos para usar" (Google, Facebook, GitHub, VK, Yandex, etc.)
  • API simple e intuitiva
  • Sin dependencias innecesarias
  • Soporte para PKCE (Proof Key for Code Exchange) para clientes públicos


Ejemplo: Autorización a través de GitHub con ScribeJava

Consideremos un escenario básico: obtener un access token de GitHub. Primero, agregue la dependencia en pom.xml:



<dependency>    <groupId>com.github.scribejava</groupId>    <artifactId>scribejava-apis</artifactId>    <version>8.3.3</version></dependency>


Ahora, el código del 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 = "su_client_id"; final String clientSecret = "su_client_secret"; final String callbackUrl = "http://localhost:8080/callback";

// Creamos el servicio OAuth 2.0 OAuth20Service service = new ServiceBuilder(clientId) .apiSecret(clientSecret) .callback(callbackUrl) .scope("user:email") // solicitamos acceso al email .build(GitHubApi.instance());

// Paso 1: Obtenemos la URL para redirigir al usuario final String authorizationUrl = service.getAuthorizationUrl(); System.out.println("Vaya al enlace para autorizar: " + authorizationUrl);

// Paso 2: Después de la redirección, extraemos el código del callback // (normalmente se hace en un controlador, aquí como ejemplo — entrada por consola) System.out.print("Ingrese el código del callback: "); java.util.Scanner scanner = new java.util.Scanner(System.in); String code = scanner.nextLine();

// Paso 3: Intercambiamos el código por un access token OAuth2AccessToken accessToken = service.getAccessToken(code); System.out.println("Access Token: " + accessToken.getAccessToken());

// Paso 4: Usamos el token para hacer una solicitud a la API OAuthRequest request = new OAuthRequest(Verb.GET, "https://api.g

Recommendations