Saltar al contenido
OAuth · Authorization Code + PKCE

Tu juego, conectado desde afuera.

Los juegos externos usan clientes públicos o confidenciales. Cada cliente tiene un callback exacto y permisos registrados.

La ventana de autorización de SaltoPlay

El SDK admite loginMode: "popup" o "redirect" (predeterminado). Llamá a play.auth.login() desde un clic para abrir el popup. El callback registrado debe estar en el mismo origen que el juego y cargar el SDK oficial: éste devuelve el resultado al juego, valida origen, ventana y state, canjea el código con PKCE y cierra el popup. El juego puede consultar la sesión y el perfil al resolverse login(). Si SaltoPlay.isOAuthCallback es true, no inicies el juego en esa ventana. El SDK informa popup_blocked, popup_closed o popup_timeout sin redirigir automáticamente. Usá loginMode: "redirect" si el navegador o las políticas de aislamiento impiden usar el popup.

Cliente público

Registrá el callback HTTPS exacto; localhost HTTP se permite para desarrollo. No pongas secretos en un navegador. El SDK genera state y un verificador PKCE, mantiene ese estado temporal en sessionStorage y canjea el código al volver.

const play = await SaltoPlay.init({
  transport: 'external',
  apiOrigin: 'https://play.saltouruguayserver.com',
  clientId: 'TU_CLIENT_ID',
  loginMode: 'popup',
  persistence: 'session',
  redirectUri: 'https://tu-juego.com/callback',
  scopes: ['profile:read', 'saltotag:read', 'saves:read', 'saves:write']
});
const session = await play.auth.getSession();
// Desde el botón de conectar cuenta:
loginButton.onclick = async () => {
  await play.auth.login();
  const profile = await play.player.getProfile();
};

Cliente confidencial

Guardá el secreto en tu servidor. POST /oauth/token acepta client_id, client_secret, grant_type, code, redirect_uri y code_verifier como formulario URL-encoded. PKCE S256 es obligatorio también para estos clientes. El secreto se muestra sólo al crearlo y se persiste como hash.

Caducidad y renovación

Los códigos duran 60 segundos y se consumen atómicamente. El acceso dura una hora. El refresh dura hasta 30 días, rota en cada uso y la reutilización revoca su familia. El SDK guarda acceso, refresh y caducidad en sessionStorage, separados por portal, cliente y callback. La sesión sobrevive a recargas durante la pestaña; al cerrarla se elimina. Renueva el acceso antes de vencer al consultar la sesión o llamar a la API, compartiendo una renovación entre solicitudes del mismo cliente SDK. persistence: "memory" desactiva el almacenamiento de tokens. No se usa localStorage para credenciales.

Revocación

El jugador puede revocar un juego en Ajustes. Eso invalida sus códigos, acceso y refresh tokens. Suspender o retirar el juego también bloquea el acceso. auth.logout del SDK externo borra los tokens de memoria y sessionStorage; no cierra la sesión global SaltoUruguayServer.