Twenty hat zwei unabhängige Schlüsselfamilien:Documentation Index
Fetch the complete documentation index at: https://docs.twenty.com/llms.txt
Use this file to discover all available pages before exploring further.
- JWT-Signaturschlüssel — asymmetrische ES256-Schlüsselpaare (
kid-markiert), die incore."signingKey"gespeichert sind und zum Signieren und Verifizieren von Access-/Refresh-Tokens verwendet werden. - Verschlüsselungsschlüssel im Ruhezustand —
ENCRYPTION_KEY, wird verwendet, um OAuth-Tokens, Anwendungsvariablen, die privaten Schlüssel der Signierschlüssel, sensible Konfigurationswerte und TOTP-Geheimnisse innerhalb einesenc:v2:-Umschlags zu verschlüsseln.
APP_SECRET ist ein veraltetes Secret, das aus Gründen der Abwärtskompatibilität beibehalten wird: Wenn ENCRYPTION_KEY nicht gesetzt ist, fungiert es als Fallback für At-Rest-Verschlüsselung / Session-Cookie und verifiziert weiterhin bereits bestehende HS256-Access-Tokens. Es wird als veraltet markiert werden.
JWT-Signierschlüssel
Jeder Schlüssel enthält einenpublicKey (unbefristet aufbewahrt, damit er zuvor ausgestellte Tokens verifizieren kann), einen verschlüsselten privateKey (nur verwendet, solange der Schlüssel aktuell ist), ein isCurrent-Flag (zu jedem Zeitpunkt genau eine Zeile) und ein optionales revokedAt.
Aktuellen Schlüssel rotieren
Setzen SieSIGNING_KEY_ROTATION_DAYS, um die Funktion zu aktivieren: Ein täglicher Cronjob erstellt dann einen neuen aktuellen Schlüssel, sobald der bestehende Schlüssel älter als dieser Schwellenwert ist. Frühere Schlüssel werden nicht widerrufen, daher werden Tokens, die darunter signiert wurden, weiterhin verifiziert. Lassen Sie die Variable ungesetzt, um die automatische Rotation zu deaktivieren.
Die automatische Rotation ist ab Version v2.6 verfügbar.
Einen Schlüssel widerrufen (nur bei Leak / Notfall)
Settings → Admin Panel → Signing keys → Revoke in einer nicht aktuellen Zeile. Löscht das verschlüsselte private Material, setztrevokedAt und weist jedes vorhandene Token zurück, das unter diesem kid signiert wurde.
ENCRYPTION_KEY rotieren
Der unten beschriebene Befehl
secret-encryption:rotate ist ab v2.6+ enthalten.enc:v2:\<keyId>:\<payload> verpackt, wobei \<keyId> ein 8-stelliges Hex-Präfix ist, das aus dem Rohschlüssel abgeleitet wird. Die Rotation erfolgt online und ist fortsetzbar.
-
Einen neuen Schlüssel generieren:
openssl rand -base64 32. -
Beide Schlüssel nebeneinander konfigurieren in
.envund dann neu starten:Neue Schreibvorgänge verwenden den neuen Schlüssel, vorhandene Zeilen werden weiterhin über den Fallback entschlüsselt. -
Vorhandene Zeilen erneut verschlüsseln:
Der Befehl durchläuft sechs Sites (
connected-account-tokens,application-variable,application-registration-variable,signing-key-private-keys,sensitive-config-storage,totp-secrets). Ein SQL-Filter überspringt Zeilen, die bereits auf dem neuen\<keyId>sind, sodass der Befehl idempotent ist: Unterbrechen und bei Bedarf erneut ausführen. Beendet sich mit einem von Null verschiedenen Exit-Code, wenn irgendeine Zeile fehlschlägt — zum Wiederholen erneut ausführen.Flag Beschreibung -s, --site \<site>Auf eine einzelne Site beschränken. -b, --batch-size \<n>Zeilen pro Batch (Standard 200, Maximum5000).-d, --dry-runEntschlüsseln + erneut im Speicher verschlüsseln, das UPDATEüberspringen. -
Den Fallback entfernen, sobald
--dry-runnull verbleibende Zeilen anzeigt:FALLBACK_ENCRYPTION_KEYentfernen und neu starten.
Legacy-Unterstützung für APP_SECRET
Ältere Instanzen, die niemals ENCRYPTION_KEY gesetzt haben, verwenden APP_SECRET als At-Rest-Verschlüsselungsschlüssel (und als Session-Cookie-Secret, das daraus abgeleitet wird). Dieser Pfad wird aus Gründen der Abwärtskompatibilität beibehalten, ist aber veraltet — setze einen dedizierten ENCRYPTION_KEY und folge dem oben beschriebenen Rotationsverfahren, um davon zu migrieren. APP_SECRET selbst bleibt in Verwendung, um Legacy-HS256-Access-Tokens zu verifizieren.