🔐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-Key
Auf 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.0

Der empfohlene Flow für Apps mit Nutzer (Web, Mobil, SPA). PKCE schützt den Code, falls er abgefangen wird.

Schritt 1 / 8 · Tasten ← →
👤 Nutzer / Browser📱 Client-App🏛️ Autorisierungsserver🗄️ API (Resource Server)1. code_verifier + code_challenge2. GET /authorize?response_type=code …3. Anmelden + Zustimmung4. 302 → redirect_uri?code=…&state=x7f5. POST /token grant_type=authorization_code6. { access_token, refresh_token }7. POST /v1/orders + Bearer-Token8. 201 Created
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:
Operationwirksames securityErgebnis
GET/books[] → öffentlich ✅ darf
POST/booksapiKey (global geerbt)✅ darf
GET/books/bestseller[] → öffentlich ✅ darf
GET/books/{bookId}[] → öffentlich ✅ darf
DELETE/books/{bookId}bearerAuth ❌ 401
POST/ordersoauth[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.