API-Schlüssel-Autorisierungsprozess
Dieses Dokument beschreibt den selbstverwalteten Prozess zur Erstellung von API-Schlüsseln für Drittanbieteranwendungen.
Übersicht
Anwendungen können API-Zugriff auf einen Unraid-Server anfordern, indem sie Benutzer auf eine spezielle Autorisierungsseite umleiten, wo Benutzer die angeforderten Berechtigungen überprüfen und mit einem Klick einen API-Schlüssel erstellen können.
Prozess
-
Anwendung fordert an: Die App leitet den Nutzer um zu:
https://[unraid-server]/ApiKeyAuthorize?name=MyApp&scopes=docker:read,vm:*&redirect_uri=https://myapp.com/callback&state=abc123
-
Benutzerauthentifizierung: Falls nicht bereits angemeldet, wird der Benutzer zuerst zur Anmeldung weitergeleitet (Standard-Unraid-Authentifizierung)
-
Zustimmungsbildschirm: Nutzer sieht:
- Anwendungsname und Beschreibung
- Angeforderte Berechtigungen (mit Checkboxen zur Genehmigung/Ablehnung spezifischer Bereiche)
- API-Schlüsselname-Feld (vorausgefüllt)
- Autorisieren & Abbrechen Schaltflächen
-
API-Schlüsselerstellung: Nach der Autorisierung:
- API-Schlüssel wird mit genehmigten Bereichen erstellt
- Schlüssel wird dem Benutzer angezeigt
- Wenn
redirect_uri
angegeben ist, wird der Benutzer mit dem Schlüssel zurückgeleitet
-
Rückruf: App erhält den API-Schlüssel:
https://myapp.com/callback?api_key=xxx&state=abc123
Abfrageparameter
name
(erforderlich): Name der anfordernden Anwendungdescription
(optional): Beschreibung der Anwendungscopes
(erforderlich): Kommagetrennte Liste der angeforderten Bereicheredirect_uri
(optional): URL, zu der nach der Autorisierung weitergeleitet werden sollstate
(optional): Undurchsichtiger Wert zur Aufrechterhaltung des Status
Bereichsformat
Bereiche folgen dem Muster: resource:action
DD-WRT: Wenn Sie "dnsmasq" mit aktiviertem DNS-Rebinding-Schutz verwenden, können Sie diese Zeile Ihrer Router
docker:read
- Lesezugriff auf Dockervm:*
- Vollzugriff auf VMssystem:update
- Update-Zugriff auf das Systemrole:viewer
- Zugriffsrolle Betrachterrole:admin
- Zugriffsrolle Administrator
Verfügbare Ressourcen:
docker
,vm
,system
,share
,user
,network
,disk
, etc.
Verfügbare Aktionen:
create
,read
,update
,delete
oder*
für alle
Sicherheitsaspekte
- HTTPS erforderlich: Umleitungs-URIs müssen HTTPS verwenden (außer localhost für die Entwicklung)
- Benutzereinwilligung: Benutzer genehmigen explizit jede Berechtigung
- Sitzungsbasiert: Verwendet bestehende Unraid-Authentifizierungssitzung
- Einmalige Anzeige: API-Schlüssel werden einmal gezeigt und müssen sicher gespeichert werden
Beispielintegration
// JavaScript Beispiel
const unraidServer = 'tower.local';
const appName = 'Mein Docker-Manager';
const scopes = 'docker:*,system:read';
const redirectUri = 'https://myapp.com/unraid/callback';
const state = generateRandomState();
// Zustand zur Überprüfung speichern
sessionStorage.setItem('oauth_state', state);
// Benutzer zur Autorisierungsseite umleiten
window.location.href =
`https://${unraidServer}/ApiKeyAuthorize?` +
`name=${encodeURIComponent(appName)}&` +
`scopes=${encodeURIComponent(scopes)}&` +
`redirect_uri=${encodeURIComponent(redirectUri)}&` +
`state=${encodeURIComponent(state)}`;
// Rückruf verarbeiten
const urlParams = new URLSearchParams(window.location.search);
const apiKey = urlParams.get('api_key');
const returnedState = urlParams.get('state');
if (returnedState === sessionStorage.getItem('oauth_state')) {
// API-Schlüssel sicher speichern
saveApiKey(apiKey);
}