Saltar al contenido principal

Flujo de Autorización de Clave API

Este documento describe el flujo de creación de claves API de autoservicio para aplicaciones de terceros.

Visión General​

Las aplicaciones pueden solicitar acceso a la API de un servidor Unraid redirigiendo a los usuarios a una página de autorización especial donde los usuarios pueden revisar los permisos solicitados y crear una clave API con un solo clic.

Flujo​

  1. La aplicación inicia la solicitud: La aplicación redirige al usuario a:

    https://[unraid-server]/ApiKeyAuthorize?name=MyApp&scopes=docker:read,vm:*&redirect_uri=https://myapp.com/callback&state=abc123
  2. Autenticación del usuario: Si no ha iniciado sesión, el usuario es redirigido para iniciar sesión primero (autenticación estándar de Unraid)

  3. Pantalla de consentimiento: El usuario ve:

    • Nombre y descripción de la aplicación
    • Permisos solicitados (con casillas de verificación para aprobar/denegar ámbitos específicos)
    • Campo de nombre de la clave API (rellenado previamente)
    • Botones Autorizar y Cancelar
  4. Creación de la clave API: Tras la autorización:

    • La clave API se crea con los ámbitos aprobados
    • La clave se muestra al usuario
    • Si se proporciona redirect_uri, el usuario es redirigido con la clave
  5. Llamada de retorno: La aplicación recibe la clave API:

    https://myapp.com/callback?api_key=xxx&state=abc123

Parámetros de consulta​

  • name (requerido): Nombre de la aplicación solicitante
  • description (opcional): Descripción de la aplicación
  • scopes (requerido): Lista de ámbitos solicitados separados por comas
  • redirect_uri (opcional): URL para redirigir tras la autorización
  • state (opcional): Valor opaco para mantener el estado

Formato del ámbito​

Los ámbitos siguen el patrón: recurso:acción

Los recursos disponibles incluyen docker, vm, system, share, user, network, disk, y otros. Las acciones disponibles son create, read, update, delete, o * para todas.

Las URIs de redireccionamiento deben usar HTTPS (excepto localhost para desarrollo). Los usuarios aprueban explícitamente cada permiso, y el flujo utiliza sesiones de autenticación existentes de Unraid. Las claves API se muestran una vez y deben guardarse de manera segura.

Recursos Disponibles:​

// JavaScript example
const unraidServer = 'tower.local';
const appName = 'My Docker Manager';
const scopes = 'docker:*,system:read';
const redirectUri = 'https://myapp.com/unraid/callback';
const state = generateRandomState();

// Store state for verification
sessionStorage.setItem('oauth_state', state);

// Redirect user to authorization page
window.location.href =
`https://${unraidServer}/ApiKeyAuthorize?` +
`name=${encodeURIComponent(appName)}&` +
`scopes=${encodeURIComponent(scopes)}&` +
`redirect_uri=${encodeURIComponent(redirectUri)}&` +
`state=${encodeURIComponent(state)}`;

// Handle callback
const urlParams = new URLSearchParams(window.location.search);
const apiKey = urlParams.get('api_key');
const returnedState = urlParams.get('state');

if (returnedState === sessionStorage.getItem('oauth_state')) {
// Save API key securely
saveApiKey(apiKey);
}