Austausch der Signierungsschlüssel
Die Authority signiert alle ausgestellten Tokens mit einem privaten Schlüssel. Dieser Schlüssel kann aus Sicherheitsgründen regelmäßig ausgetauscht werden (Key Rotation).
Übersicht
Die Authority unterstützt mehrere Signierungsschlüssel gleichzeitig. Beim Austausch wird ein neuer Schlüssel hinzugefügt und der alte nach einer Übergangsphase entfernt.
Vorteile der Key Rotation:
- Erhöhte Sicherheit durch regelmäßigen Schlüsselaustausch
- Keine Downtime beim Austausch
- Unterstützung mehrerer aktiver Schlüssel gleichzeitig
JWKS Endpoints
Die Authority stellt zwei Endpunkte für die Verwaltung der Signierungsschlüssel bereit:
Schlüssel hinzufügen
POST /jwks/addFügt einen neuen Signierungsschlüssel hinzu.
Request Body:
{
"keyType": "RSA",
"keySize": 2048
}Unterstützte Key Types:
RSA- RSA Schlüssel (empfohlen)EC- Elliptic Curve SchlüsselOKP- Octet Key Pair
Response:
{
"kid": "2024-01-15T10:30:00.000Z",
"kty": "RSA",
"alg": "RS256",
"use": "sig",
"n": "...",
"e": "AQAB"
}Schlüssel entfernen
DELETE /jwks/remove/:kidEntfernt einen Signierungsschlüssel anhand seiner Key ID (kid).
Beispiel:
curl -X DELETE http://authority:11560/jwks/remove/2024-01-15T10:30:00.000ZResponse:
{
"message": "Key removed successfully"
}Key Rotation Prozess
-
Neuen Schlüssel hinzufügen:
curl -X POST http://authority:11560/jwks/add \ -H "Content-Type: application/json" \ -d '{"keyType": "RSA", "keySize": 2048}' -
Übergangsphase:
- Die Authority signiert neue Tokens mit dem neuen Schlüssel
- Alte Tokens können weiterhin mit dem alten Schlüssel verifiziert werden
- Empfohlene Dauer: 2x Access Token TTL (z.B. 2 Stunden bei 1h TTL)
-
Alten Schlüssel entfernen:
curl -X DELETE http://authority:11560/jwks/remove/OLD_KID
Automatisierung
Die Key Rotation kann über ein Cronjob automatisiert werden:
#!/bin/bash
# key-rotation.sh
AUTHORITY_URL="http://authority:11560"
TTL_SECONDS=3600 # 1 Stunde
ROTATION_INTERVAL=$((TTL_SECONDS * 2)) # 2 Stunden
# Neuen Schlüssel hinzufügen
NEW_KEY=$(curl -X POST $AUTHORITY_URL/jwks/add \
-H "Content-Type: application/json" \
-d '{"keyType": "RSA", "keySize": 2048}')
echo "Neuer Schlüssel hinzugefügt: $(echo $NEW_KEY | jq -r '.kid')"
# Warte auf Übergangsphase
sleep $ROTATION_INTERVAL
# Alte Schlüssel entfernen (behalte nur die letzten 2)
OLD_KEYS=$(curl $AUTHORITY_URL/.well-known/jwks.json | jq -r '.keys[2:] | .[].kid')
for KID in $OLD_KEYS; do
curl -X DELETE $AUTHORITY_URL/jwks/remove/$KID
echo "Alter Schlüssel entfernt: $KID"
donePublic Key Distribution
Clients können die öffentlichen Schlüssel über den JWKS-Endpunkt abrufen:
GET http://authority:11560/.well-known/jwks.jsonResponse:
{
"keys": [
{
"kid": "2024-01-15T10:30:00.000Z",
"kty": "RSA",
"alg": "RS256",
"use": "sig",
"n": "...",
"e": "AQAB"
}
]
}Best Practices
- Rotiere Schlüssel regelmäßig (z.B. alle 30 Tage)
- Behalte mindestens 2 aktive Schlüssel während der Übergangsphase
- Verwende RSA-Schlüssel mit mindestens 2048 Bit
- Automatisiere den Rotationsprozess
- Überwache die Schlüsselanzahl (nicht mehr als 5 aktive Schlüssel)
- Teste die Rotation zunächst in einer Entwicklungsumgebung