🔐Security-Schemes
OpenAPI trennt zwei Dinge: wie man sich anmeldet (components.securitySchemes) und wo das gilt (security global oder je Operation). Die Spezifikation beschreibt die Anmeldung nur – prüfen muss sie der Server.
🗝️Die sechs Arten (type)
Ein fester Schlüssel pro Client. Einfach, aber ohne Ablaufdatum und ohne Nutzerbezug – geeignet für Server-zu-Server und öffentliche Kontingente.
In der Spezifikation
components:
securitySchemes:
apiKey:
type: apiKey
in: header # oder query, cookie
name: X-API-KeyAuf der Leitung
GET /v1/books HTTP/1.1 Host: api.example.org X-API-Key: demo-schluessel-123
⚠️ in: query landet in Logs, Browser-Verlauf und Referer – Schlüssel besser im Header senden.
🔄OAuth2-Flows als Sequenzdiagramm
Welcher Flow passt, hängt davon ab, ob ein Mensch beteiligt ist und welches Gerät er benutzt. Klicken Sie auf die Pfeile oder blättern Sie mit ← →.
flows.authorizationCode (authorizationUrl, tokenUrl)ab OpenAPI 3.0Der empfohlene Flow für Apps mit Nutzer (Web, Mobil, SPA). PKCE schützt den Code, falls er abgefangen wird.
Schritt 1 / 8 · Tasten ← →
Schritt 1: Zufälliger code_verifier; code_challenge = BASE64URL(SHA-256(code_verifier)) (RFC 7636).
🧮security: ODER-Liste aus UND-Objekten
Beispiel Buchladen-API: global apiKey, Lese-Operationen öffentlich (security: []), Löschen nur mit Bearer, Bestellen mit OAuth-Scope ODER Bearer. Schalten Sie die Anmeldedaten um.
Ich sende:
| Operation | wirksames security | Ergebnis |
|---|---|---|
| GET/books | [] → öffentlich | ✅ darf |
| POST/books | apiKey (global geerbt) | ✅ darf |
| GET/books/bestseller | [] → öffentlich | ✅ darf |
| GET/books/{bookId} | [] → öffentlich | ✅ darf |
| DELETE/books/{bookId} | bearerAuth | ❌ 401 |
| POST/orders | oauth[orders:write] ODER bearerAuth | ❌ 401 |
💡 Leere Liste
security: [] an einer Operation hebt die globale Anmeldung auf – die Operation ist öffentlich.💡 Leeres Objekt
security: [ {}, { apiKey: [] } ] heißt: Anmeldung optional – mit Schlüssel gibt es ggf. mehr.⚠️ UND in einem Eintrag
- { apiKey: [], bearerAuth: [] } verlangt BEIDES gleichzeitig. Zwei Listeneinträge bedeuten dagegen ODER.