Massen-Passwort-Zurücksetzen als Job anlegen

POST /v1/jobs/password-resets · Berechtigung user-credentials:write

Zwingt viele Benutzer in einem asynchronen Job, ein neues Passwort zu wählen, zum Beispiel nach einem vermuteten Datenleck oder um Benutzer von schwachen importierten Hash-Formaten wegzuführen. Die Antwort liefert den Job sofort; die Benutzer werden im Hintergrund markiert. Verfolgen Sie den Job mit Massen-Passwort-Zurücksetzen-Job abrufen. Für einen einzelnen Benutzer verwenden Sie Passwort-Zurücksetzen erzwingen.

Wählen Sie die Benutzer auf eine von zwei Arten aus (nicht beide):

Der Filter connection_id ist noch nicht verfügbar; eine Anfrage, die ihn sendet, wird mit 422 validation_failed abgelehnt (not_supported unter /connection_id).

Wählen Sie den mode:

Idempotency-Key ist erforderlich. Dieselben Zugangsdaten, derselbe Schlüssel und dieselbe Anfrage liefern denselben Job (mit Idempotent-Replayed: true); derselbe Schlüssel mit einer anderen Anfrage wird mit 422 idempotency_key_reuse abgelehnt. Eine Umgebung kann höchstens 20 Jobs haben, die nicht abgeschlossen sind; ein Lazy-Job bleibt bis zu seiner Frist offen. Das Anlegen des Jobs wird im Verwaltungs-Audit-Log (password_reset_job.created) festgehalten und löst das Ereignis password_reset.scheduled aus.

Anfrage

Feld Typ Pflicht Beschreibung
mode string ja on_login oder lazy_then_bulk_reset.
user_ids string[] eines von beiden 1–100.000 Benutzer-IDs (usr_…).
hash_algos string[] eines von beiden Gespeicherte Hash-Algorithmen: argon2id, argon2i, bcrypt, scrypt, firebase_scrypt, pbkdf2_sha1, pbkdf2_sha256, pbkdf2_sha512, django_pbkdf2_sha256, django_bcrypt_sha256, phpass, ldap_ssha, ldap_ssha256, sha512_crypt, hmac_sha256, salted_sha256, salted_sha512, md5.
deadline_days integer nein Nur lazy_then_bulk_reset: 1–365, Standard 30.

Antwort

202 Accepted mit dem Job.

{
  "id": "job_01h455vb4pex5vsknk084sn02q",
  "mode": "lazy_then_bulk_reset",
  "filter": "hash_algo",
  "hash_algos": ["md5", "phpass"],
  "status": "marking",
  "deadline_at": "2026-02-14T09:30:00Z",
  "total": 0,
  "marked": 0,
  "not_found": 0,
  "passwords_deleted": 0,
  "emailed": 0,
  "created_at": "2026-01-15T09:30:00Z"
}

Fehler

Jeder Fehler ist ein application/problem+json-Body mit einem stabilen code.

HTTP code Wann
400 malformed_request, unknown_field Der Header Idempotency-Key fehlt oder ist fehlerhaft, der Body ist kein gültiges JSON oder enthält ein unbekanntes Feld.
401 unauthenticated Der API-Schlüssel fehlt, ist ungültig oder widerrufen.
403 insufficient_permissions Dem Schlüssel fehlt die Berechtigung user-credentials:write.
409 conflict Die Umgebung hat bereits 20 Jobs, die nicht abgeschlossen sind.
413 payload_too_large Der Body ist größer als 4 MiB.
422 validation_failed Ein Feld fehlt oder ist ungültig; errors[].pointer nennt es.
422 idempotency_key_reuse Der Idempotency-Key wurde mit einer anderen Anfrage verwendet.
429 rate_limited Das Ratenlimit wurde überschritten; beachten Sie Retry-After.
503 service_unavailable Eine Abhängigkeit ist vorübergehend nicht verfügbar; versuchen Sie es später erneut.

Beispiel

curl -X POST https://api.eu.keenauth.com/v1/jobs/password-resets \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"mode": "lazy_then_bulk_reset", "hash_algos": ["md5", "phpass"], "deadline_days": 30}'

CLI: keenauth jobs password-resets create --mode lazy_then_bulk_reset --hash-algos md5,phpass --deadline-days 30 --yes