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);
}