https://<name>.auth.didit.mefür eine Live-Anwendung,https://<name>.sandbox.auth.didit.mefür eine Sandbox-Anwendung,- oder Ihre eigene benutzerdefinierte Domain, sobald sie aktiv ist.
DIDIT_AUTH_ISSUER auf Ihren Issuer ohne abschließenden Schrägstrich und DIDIT_APPLICATION_ID auf Ihre Anwendungs-ID: Tokens enthalten sie als aud. Ihr Publishable Key kodiert den Issuer: Nach pk_live_ oder pk_test_ steht der Issuer als base64url ohne Padding.
Wenn Ihre benutzerdefinierte Domain aktiv wird, ersetzt sie den Standard-Host als Issuer. Neue Tokens nennen sie in
iss, Discovery verweist jwks_uri auf sie, und Ihr Publishable Key ändert sich. Access-Tokens, die unter dem Standard-Host ausgestellt wurden, schlagen bei GET /session/ fehl, bis sie aktualisiert werden. Aktualisieren Sie DIDIT_AUTH_ISSUER, wenn Sie die Domain aktivieren, oder akzeptieren Sie beide Issuer, bis die älteren Tokens innerhalb von 5 Minuten ablaufen.Discovery und Schlüssel
Der Issuer unterstützt:
- Response-Type
codeund Response-Modequery. - Grant-Types
authorization_codeundrefresh_token. - Ausschließlich die PKCE-Methode
S256. Es handelt sich um öffentliche Clients: Es gibt kein Client-Secret, undclient_idist Ihre Anwendungs-ID. - Signaturalgorithmus
ES256(P-256-Schlüssel). - Scopes
openid,email,phone,profileundoffline_access.
prompt=none wird nicht unterstützt. Verwenden Sie GET /session/, um eine Sitzung zu lesen und zu prüfen.
Caching und Rotation
Beide Dokumente liefernCache-Control: public, max-age=300, sodass Sie und gemeinsam genutzte Caches sie 5 Minuten lang behalten können. Pro IP-Adresse sind 1.200 Anfragen pro Minute und 12.000 pro Stunde erlaubt. Das liegt weit über den Anmelde-Endpoints, weil sich viele Backend-Instanzen oft eine Adresse teilen.
- Jeder Schlüssel hat eine
kid; neue Schlüssel-IDs beginnen mitk_. Jedes Token nennt seinen Schlüssel imkid-Header. - Schlüssel rotieren alle 30 Tage. Didit veröffentlicht den nächsten Schlüssel einen Tag, bevor er mit dem Signieren beginnt, und hält den vorherigen Schlüssel einen Tag lang veröffentlicht, nachdem er nicht mehr signiert. Ein 5 Minuten lang gecachtes JWKS ermöglicht daher auch während einer Rotation weiterhin eine erfolgreiche Verifizierung.
- Cachen Sie Schlüssel nach
kid. Nennt ein Token einekid, die Sie nicht haben, laden Sie das JWKS erneut, höchstens einmal pro Minute, und weisen Sie das Token zurück, wenn der Schlüssel weiterhin fehlt. - Wenn Didit einen kompromittierten Schlüssel widerruft, entfernt es den Schlüssel sofort aus dem JWKS, und
GET /session/weist jedes Token zurück, das mit diesem Schlüssel signiert wurde. Ein Ersatzschlüssel beginnt sofort mit dem Signieren, ohne die eintägige Vorabveröffentlichung. Ein bis zu 5 Minuten früher gecachtes JWKS akzeptiert den widerrufenen Schlüssel noch und kennt den Ersatzschlüssel noch nicht. Neue Tokens können deshalb bei der Offline-Verifizierung fehlschlagen, bis der Cache aktualisiert wird.
Anmeldung starten
Öffnen Sie die gehostete Seite, also denauthorization_endpoint:
Die Schnellstarts erstellen diese Anfrage für Sie.
Code einlösen
Der Callback erhältcode und state. Prüfen Sie state und lösen Sie den Code dann innerhalb von 60 Sekunden ein. Jeder Code funktioniert nur einmal. Der Body kann JSON oder form-kodiert sein.
expires_in gibt an, wie viele Sekunden das Access-Token noch gültig bleibt. Wenn Sie mehrere Sitzungen deaktivieren, beendet dieser Austausch die anderen Sitzungen der Person.
Access-Token-Claims
Das Access-Token ist ein JWT mit dem Headeralg: ES256 und typ: at+jwt. Es ist höchstens 5 Minuten gültig und nie länger als seine Sitzung.
Das ID-Token hat den Header
typ: JWT. Es enthält dieselben Claims mit Ausnahme von client_id, außerdem auth_time und email_verified sowie email, name und phone_number, sofern sie einen Wert haben. Nur das beim Codeaustausch ausgegebene ID-Token enthält nonce, wenn die Anmeldung einen hatte: Prüfen Sie ihn dort, denn ID-Tokens aus einem Refresh enthalten ihn nie. Ein ID-Token wird niemals als Access-Token akzeptiert.
Token auf Ihrem Server prüfen
Prüfen Sie alle diese Punkte, bevor Sie einem Claim vertrauen:algistES256undtypistat+jwt. Lehnen Sie jeden anderen Algorithmus ab, auchnone.- Der
kid-Wert ist im JWKS Ihrer Anwendung enthalten, und die Signatur wird verifiziert. issentspricht Ihrem konfigurierten Aussteller, undaudentspricht Ihrer Anwendungs-ID.expundiatsind gültig, mit einer Uhrzeitabweichung von bis zu 60 Sekunden, undsub,sidundjtisind vorhanden.actistnull. Das Access-Token eines KI-Agenten wird mit demselben Schlüssel signiert und trägt denselbentyp,issundaud; nuractunterscheidet es. Lehnen Sie es ab, sofern der Endpoint keine Agenten akzeptiert. Ist das der Fall, erlauben Sie nur, wasact.scopesgewährt.GET /session/lehnt das Token eines Agenten immer ab.
GET /session/ auf.
Sitzung prüfen
sub, sid, application_id, vendor_data, amr, mfa_verified, email, email_verified, phone, verified_identity, verified, expires_at, post_logout_redirect_uri und organizations. Jeder Organisationseintrag enthält organization_id, organization__name, role und custom_role.
Diese Prüfung ist strenger als die Offline-Prüfung. Sie schlägt auch fehl, wenn die Sitzung widerrufen wurde, wegen Inaktivität abgelaufen ist oder ihre Gültigkeitsdauer überschritten hat, wenn die Person gesperrt wurde oder ihre E-Mail-Adresse nicht mehr verifiziert ist, wenn die Sitzung Ihrer MFA-Richtlinie nicht mehr entspricht (zum Beispiel nachdem die Person eine Authenticator-App hinzugefügt hat oder Organisationsadministrator geworden ist) oder wenn das Token durch einen Refresh ersetzt wurde. Ein Fehler liefert 401 {"detail": "invalid_token"} mit WWW-Authenticate: Bearer.
GET /session/ erlaubt 30 Anfragen pro Minute und 300 pro Stunde und IP-Adresse, ein Limit, das es mit DELETE /session/ teilt. Prüfen Sie Tokens bei jeder Anfrage offline und nutzen Sie diesen Aufruf nur in Momenten, die ihn erfordern. Jeder erfolgreiche Aufruf zählt als Aktivität und startet daher das idle_timeout der Sitzung neu.
Eine verifizierte E-Mail-Adresse ist keine Identitätsverifizierung. Lesen Sie dafür verified: Dort ist der Wert null, wenn keine vorliegt, während die Tokens {} enthalten.
Refresh-Tokens
- Das Refresh-Token ist eine zufällige Zeichenfolge, die bis zum Ende der Sitzung gültig ist.
- Eine Wiederverwendung beendet die Sitzung. Wenn ein bereits verwendetes Refresh-Token erneut eingeht, wertet Didit das als Hinweis auf Diebstahl: Es widerruft die Sitzung und liefert
400 {"error": "invalid_grant"}. Auch die Tokens der Sitzung funktionieren nicht mehr, einschließlich derer aus dem früheren Refresh: Deren Refresh-Token schlägt fehl, und deren Access-Token schlägt sofort beiGET /session/fehl. Offline lässt es sich noch bis zu seinem Ablauf verifizieren, also innerhalb von 5 Minuten. - Führen Sie für eine Sitzung jeweils nur einen Refresh aus, über Tabs, Geräte und Serverinstanzen hinweg, und ersetzen Sie alle drei Tokens gemeinsam.
- Schlägt ein Refresh mit
400fehl oder bleibt eine Antwort aus, starten Sie die Anmeldung neu. Versuchen Sie es nicht blind erneut: Ein Wiederholungsversuch nach einem erfolgreichen Refresh ist eine Wiederverwendung. - Ein
503 {"error": "temporarily_unavailable"}bedeutet, dass der Refresh nicht stattgefunden hat und Ihr Refresh-Token weiterhin funktioniert. Versuchen Sie es mit Backoff erneut. - Didit antwortet mit
429, bevor der Refresh ausgeführt wird. Wiederholen Sie ihn daher nachRetry-After. Der Token-Endpoint erlaubt 30 Anfragen pro Minute und 300 pro Stunde und IP-Adresse. Zusätzlich teilen sich allePOST- undDELETE-Anfragen Ihrer Anwendung Bot-Schutz-Kontingente: 60 Anfragen pro Minute und IP-Adresse über diese Endpoints hinweg und 30 pro Minute und Gerät. Für die gesamte Anwendung gibt es für Refreshes ein Kontingent von 6.000 pro Minute, und jedes anderePOSTundDELETE(einschließlich Browser und Anmeldeschritte) ein Kontingent von 3.000 pro Minute. So verbrauchen Refreshes nie Ihr Kontingent für Anmeldungen. - Bei 5-Minuten-Access-Tokens decken 300 Refreshes pro Stunde etwa 25 Personen ab, die aktiv bleiben. Wenn Ihr Server für viele Personen von einer Adresse aus refresht, refreshen Sie nur, wenn eine Anfrage ein neues Token benötigt, und führen Sie Refreshes möglichst im Browser oder in der App durch.
Abmelden
DELETE /session/ mit dem aktuellen Access-Token der Person beendet die Sitzung und gibt 204 zurück. Das zugehörige Refresh-Token funktioniert danach nicht mehr, und ihre Access-Tokens schlagen bei GET /session/ sofort fehl. Tokens, die Sie offline prüfen, bleiben bis zu ihrem Ablauf gültig. Anschließend leiten Sie die Person auf Ihre post_logout_redirect_uri weiter, sofern Sie eine gesetzt haben.
Für die Abmeldung benötigen Sie ein Access-Token, das GET /session/ akzeptieren würde: eines, das nicht abgelaufen ist und nicht durch ein Refresh ersetzt wurde. Ein 401 bedeutet, dass die Sitzung nicht beendet wurde. Führen Sie in diesem Fall ein Refresh durch und melden Sie sich dann mit dem neuen Access-Token ab. Schlägt das Refresh mit 400 fehl, kann die Sitzung nicht mehr verwendet werden.
Eine Sitzung endet außerdem, wenn:
- sie
session_lifetime(Standard 30 Tage) oderidle_timeout(Standard 1 Tag) überschreitet, - sich die Person erneut anmeldet, während die Option für mehrere Sitzungen deaktiviert ist,
- die Person ihr Passwort zurücksetzt, während
revoke_on_password_changeaktiviert ist, - Ihr Team die Sitzung in der Konsole widerruft oder die Person dort sperrt,
- ein bereits verwendetes Refresh-Token erneut gesendet wird.
Lebensdauer
Zugangsdaten je nach Zweck speichern
- Bewahren Sie Verifizierungs-API-Schlüssel und Console-Tokens auf Ihrem Server auf.
- Bewahren Sie Access-Tokens für den Browser nach Möglichkeit im Arbeitsspeicher auf. Bei serverseitig gerenderten Anwendungen verwenden Sie sichere Cookies mit HttpOnly-Flag und schützen Anfragen mit Cookie-Authentifizierung vor CSRF.
- Speichern Sie Refresh-Tokens für mobile Apps in einem plattformgeschützten Speicher. Löschen Sie den lokalen Zustand nach der Abmeldung.
- Setzen Sie Tokens niemals in URLs oder Logs.