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
-
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 -
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)
-
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
-
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
-
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 solicitantedescription(opcional): Descripción de la aplicaciónscopes(requerido): Lista de ámbitos solicitados separados por comasredirect_uri(opcional): URL para redirigir tras la autorizaciónstate(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);
}