Mettre à jour la politique des clés de signature

PATCH /v1/signing-keys/policy · permission signing-keys:write

Met à jour la politique des clés de signature avec un JSON merge patch (application/merge-patch+json, RFC 7396). If-Match est obligatoire : absent, 428 ; version périmée, 412. Si la politique n'a jamais été écrite, la version est "0". Un patch qui ne change rien n'écrit rien et conserve la version.

Changer algorithm génère aussitôt une nouvelle clé next avec le nouvel algorithme ; elle peut devenir active au plus tôt 7 jours plus tard, afin que les vérificateurs qui mettent le JWKS en cache la voient d'abord (une rotation immediate plus précoce échoue avec 409 next_key_too_young). La clé active continue de signer jusque-là. Changer rotation_interval_days déplace next_rotation_at. Une modification réussie écrit l'enregistrement d'audit de gestion signing_key.policy_updated.

Requête

Champ Type Obligatoire Description
If-Match header oui L'ETag de la politique tel que lu en dernier ("0" si jamais écrite). Absent : 428 ; périmé : 412.
algorithm string non RS256, ES256, PS256 ou EdDSA. Ne peut pas être null.
rotation_interval_days integer non 30 à 365. Ne peut pas être null.
storage string non wrapped (la clé privée est stockée chiffrée sous la clé de l'environnement et utilisée uniquement dans le service de signature). transit (clé conservée dans le service de gestion des clés) n'est pas encore disponible et est rejeté avec 422. Ne peut pas être null.

Réponse

200 OK avec la politique mise à jour et le nouvel ETag.

{
  "algorithm": "ES256",
  "rotation_interval_days": 90,
  "storage": "wrapped",
  "next_rotation_at": "2026-12-04T09:30:00.123456Z",
  "updated_at": "2026-10-05T09:30:00.123456Z"
}

Erreurs

HTTP code Quand
400 unknown_field Le patch contient un champ inconnu ou en lecture seule, ou n'est pas un objet JSON (malformed_request).
412 precondition_failed If-Match ne correspond pas à la version actuelle.
415 unsupported_media_type Le type de contenu n'est pas application/merge-patch+json.
422 validation_failed Une valeur est invalide (invalid_value), hors limites (out_of_range), définie à null (invalid), ou storage vaut transit.
428 precondition_required L'en-tête If-Match est manquant.
401 unauthenticated L'authentification est manquante, invalide ou révoquée.
403 insufficient_permissions L'authentification manque la permission requise.
429 rate_limited La limite de débit a été dépassée ; réessayez après la période Retry-After.
501 not_implemented L'opération n'est pas encore disponible dans ce déploiement ; réessayer ne change pas le résultat.
503 service_unavailable Une dépendance est temporairement indisponible ; réessayez après la période Retry-After.

Exemple

curl -X PATCH https://api.eu.keenauth.com/v1/signing-keys/policy \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY" \
  -H "Content-Type: application/merge-patch+json" \
  -H 'If-Match: "0"' \
  -d '{"algorithm":"ES256","rotation_interval_days":90}'