Lässt es sich mit cremefarbenem Papier, einer Tönung, mehr Kontrast oder größerer Schrift besser lesen? Wählen Sie Ihre Farben und Ihre Schrift, einmalig für alle Seiten.

Kostenlose Lektion

API absichern: Schlüssel, Tokens, Limits

Nach dieser Lektion: Ich kann eine API mit Schlüsseln, Tokens und Limits schützen.

Lektion, 60 Min.7 BefehlePostgreSQL-und-PostgREST-Lab: eine Datenbank und eine REST-API im Browser

Wie schützt man eine API?

API-Sicherheit heißt, dass ein Dienst nur Anfragen beantwortet, die von bekannten Absendern kommen, nur Erlaubtes tun und niemanden überlasten. Ohne diesen Schutz kann jede Person Daten lesen, ändern oder den Dienst mit Anfragen lahmlegen.

Die Ausleihdaten einer Bibliothek zeigen, warum: Sie verraten, wer welches Buch gelesen hat.

Am Ende dieser Lektion

Notiz

Ich kann eine API mit Schlüsseln, Tokens und Limits schützen.

Schlüsselwörter

BegriffWas er bedeutet
API-Schlüsseleine lange geheime Zeichenfolge, die eine Anwendung ausweist
Tokenein Ausweis auf Zeit, den der Server nach der Anmeldung ausstellt
Ablaufzeitder Zeitpunkt, ab dem ein Token nicht mehr gilt
Authentifizierungdie Frage: Wer sind Sie?
Autorisierungdie Frage: Was dürfen Sie?
Ratenbegrenzungeine Obergrenze für Anfragen in einer Zeitspanne

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Ein API-Schlüssel nennt die Anwendung

Ein API-Schlüssel ist eine lange, zufällige Zeichenfolge. Die Anwendung schickt ihn in einem Header mit jeder Anfrage. So weiß der Server, wer fragt, und kann den Zugriff einer Anwendung sperren.

Speichern Sie Schlüssel nie im Klartext. Der Server legt nur den Hash ab, eine Prüfsumme, aus der sich der Schlüssel nicht zurückrechnen lässt.

Ein Beispiel: eine Anfrage mit Schlüssel

Code: bash
GET /ausleihen HTTP/1.1
Host: api.beispiel.de
X-API-Key: bibliothek-4711

# Der Server berechnet den Hash des Schlüssels und sucht ihn in seiner Liste.

Den Hash eines Schlüssels berechnen

Befehl
printf 'bibliothek-4711' | sha256sum

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

psql das Passwort geben

Befehl
export PGPASSWORD=shop

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Die Tabelle buecher anlegen und füllen

Befehl
psql -h db -U shop -c "drop table if exists buecher cascade; create table buecher (id serial primary key, titel text not null, fach text not null, jahr int not null, exemplare int not null default 1); insert into buecher (titel, fach, jahr, exemplare) values ('Algorithmen kompakt', 'Informatik', 2019, 3), ('Netze verstehen', 'Informatik', 2021, 2), ('Statistik fuer alle', 'Mathematik', 2018, 1), ('Schreiben im Studium', 'Sprache', 2020, 4); notify pgrst, 'reload schema'"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Mit einem Schlüssel fragen, den niemand prüft

Befehl
curl -s -o /dev/null -w "%{http_code}\n" -H "X-API-Key: bibliothek-4711" "http://api:3000/buecher"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Ein Token ist ein Ausweis auf Zeit

Nach der Anmeldung stellt der Server ein Token aus. Die Anwendung schickt es mit jeder Anfrage im Header Authorization: Bearer .... Ein Token nennt die Person und eine Ablaufzeit.

Es gilt nur kurz, etwa eine Stunde. Wird es gestohlen, hilft es dem Dieb nur kurz. Der Server prüft bei jeder Anfrage die Unterschrift und die Ablaufzeit.

Den Inhalt eines Tokens kodieren

Befehl
printf '{"nutzer":"anna","bis":1900000000}' | base64

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Ihn wieder lesen

Befehl
echo eyJudXR6ZXIiOiJhbm5hIiwiYmlzIjoxOTAwMDAwMDAwfQ== | base64 -d

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Ein häufiger Fehler

Warnung

Viele glauben, ein Token sei geheim, weil es wie Zeichensalat aussieht. Base64 ist aber keine Verschlüsselung: Jede Person kann den Inhalt lesen, wie der Run gerade zeigte. Legen Sie nie ein Geheimnis in ein Token und schützen Sie es wie ein Passwort.

Ein Beispiel: wann ein Token noch gilt

Ablaufzeit (bis)JetztGilt es noch?
19000000001899999000Ja, es sind noch 1000 Sekunden
19000000001899999999Ja, noch eine Sekunde
19000000001900000000Nein, die Zeit ist genau erreicht
19000000001900003600Nein, seit einer Stunde abgelaufen

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Die Ablaufzeit prüfen

Code: python
def token_gilt(bis, jetzt):
    # Ein Token gilt, solange die Zeit noch nicht erreicht ist.
    return jetzt < bis

print(token_gilt(1900000000, 1899999999))
print(token_gilt(1900000000, 1900000000))
# Probieren Sie eine eigene Zeit.

Ein Token-Bucket begrenzt die Anfragen

Ein Limit schützt den Dienst vor zu vielen Anfragen. Das Token-Bucket-Verfahren stellt sich einen Eimer mit Marken vor. Er fasst höchstens K Marken. Jede Anfrage nimmt eine heraus.

Jede Sekunde kommen R Marken dazu, aber nie mehr, als der Eimer fasst. Ist er leer, antwortet der Server mit 429. So sind kurze Spitzen erlaubt, und auf Dauer gilt die Rate R.

Ein Beispiel: Eimer mit 3 Marken

Zeit (s)Marken vor der AnfrageAntwortMarken danach
032002
022001
012000
004290
11 (eine neue)2000
104290
32 (zwei neue)2001

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Fünf Anfragen hintereinander senden

Befehl
for i in 1 2 3 4 5; do curl -s -o /dev/null -w "%{http_code} " "http://api:3000/buecher"; done; echo

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Über dieses Lab und seinen Quellcode: PostgreSQL-und-PostgREST-Lab: eine Datenbank und eine REST-API im Browser

Sie unterrichten eine Gruppe? Weisen Sie dieses Modul Ihren Studierenden zu, mit Handbuch für Lehrende, automatisch geprüften Aufgaben und einem Lab für jede Person.