İmzalama anahtarlarını yenileme

POST /v1/signing-keys:rotate · izin signing-keys:write

Otomatik takvimin dışında, hemen bir imzalama anahtarı yenilemesi çalıştırır.

Federasyon anahtarları

use ortamın federasyon anahtarlarından birini de belirtebilir: saml_sp_signing ve saml_sp_encryption (SP metadata'nızda yayımlanan SAML hizmet sağlayıcı imzalama ve şifreleme anahtarları) veya oidc_rp_signing (kurumsal OIDC bağlantılarının private_key_jwt anahtarı, /sso/jwks.json adresinde yayımlanır). Bu anahtarlar her zaman RSA-3072'dir ve kendiliğinden yılda bir kez yenilenir: yeni bir next anahtarı, devralmasından 30 gün önce yayımlanır ve eski anahtar devralmanın ardından 30 gün boyunca yayımlı kalır.

Federasyon anahtarı için yanıttaki next_kid null değerini alır, removed_kids boş kalır ve revoke_sessions kullanılamaz. Ortam hiç SAML veya private_key_jwt kullanmadıysa yenilenecek anahtar yoktur ve çağrı 409 conflict hatasıyla başarısız olur.

Bağlantı anahtarları

Bir SAML bağlantısı, ortamın anahtarları yerine kendine özgü SP anahtarlarına sahip olabilir. Bunları yenilemek için connection_id (conn_…) değerini use: saml_sp_signing veya saml_sp_encryption ile ekleyin. Aynı modlar, izinler ve kurallar geçerlidir; ancak yalnızca o bağlantının anahtar kümesi değişir: ortamın anahtarları ve diğer bağlantıların anahtarları olduğu gibi kalır ve connection.sp_certificate_rotation_started olayı yalnızca o bağlantı için gönderilir. Denetim kaydı, hedef olarak ortamı, bağlantıyı ise metadata.connection_id alanında belirtir. Bilinmeyen bir bağlantı veya başka bir ortama ait bir bağlantı 404 not_found hatasıyla başarısız olur; ortamın anahtarlarını kullanan bir bağlantı 409 connection_keys_not_dedicated hatasıyla başarısız olur (ortamın anahtarlarını connection_id olmadan yenileyin). connection_id belirtilmezse ortamın anahtar kümesi yenilenir.

Acil durum modu, signing-keys:write dışında, kimlik bilgisinde açıkça verilmiş signing-keys:emergency iznini gerektirir: bu çağrıyı yalnızca kısıtlı bir anahtar veya bu izni taşıyan bir M2M istemcisi yapabilir. Tam erişimli bir gizli anahtar (idp_sk_…) acil durum modunda 403 insufficient_permissions alır.

Yeni jeton imzalama anahtarları, ortam politikasının algoritmasını kullanır (politikayı alın). Başarılı bir jeton imzalama anahtarı yenilemesi signing_key.rotated veya signing_key.revoked webhook olayını yayar; her yenileme bir yönetim denetim kaydı yazar. Bu uç nokta "anahtar ve gizli anahtar düzenleme" hız sınırı ailesine aittir. Bir Idempotency-Key başlığı gönderin: ağ hatasından sonra yapılan yeniden denemede, iki kez yenilemek yerine ilk sonuç döndürülür.

İstek

JSON gövdesi (bilinmeyen alanlar 400 unknown_field ile reddedilir):

Alan Tür Zorunlu Açıklama
Idempotency-Key başlık hayır Önerilir. A-Z a-z 0-9 _ - karakterlerinden 16-64 karakter.
mode metin evet immediate veya emergency.
use metin hayır Yenilenecek anahtar. Varsayılan token_signing (erişim ve ID jetonu imzalama anahtarı). Federasyon anahtarları saml_sp_signing, saml_sp_encryption ve oidc_rp_signing'tir (bkz. Federasyon anahtarları).
revoke_sessions boolean hayır Yalnızca acil durum ve token_signing için. Ayrıca tüm oturumları ve yenileme jetonlarını iptal eder. Varsayılan false.
revoke_next boolean hayır Yalnızca acil durum için. Ayrıca yayımlanmış next anahtarını iptal eder. Varsayılan false.
reason metin acil durumda: evet Yalnızca acil durum için. 1-512 yazdırılabilir ASCII karakteri, örneğin bir olay numarası. Buraya gizli bilgi veya kişisel veri yazmayın.
connection_id metin hayır Yalnızca saml_sp_signing ve saml_sp_encryption için. Kendine özgü SP anahtarları olan bir SAML bağlantısı (conn_…); ortamın yerine bu bağlantının anahtar kümesi yenilenir (bkz. Bağlantı anahtarları).

mode: immediate ile revoke_sessions: true, revoke_next: true veya bir reason göndermek 422 hatasıyla başarısız olur (not_allowed). token_signing veya oidc_rp_signing ile birlikte bir connection_id de aynı şekilde başarısız olur.

Yanıt

200 OK, yenilemenin sonucunu içerir. activated_kid, bundan sonra imzalayan anahtardır; next_kid ise yeni yayımlanan next anahtarıdır (federasyon anahtarı için null). retired_kids, imzalamayı bırakmış ve yayımlı kalmaya devam eden anahtarlardır (jeton imzalama anahtarı için 7 gün, federasyon anahtarı için 30 gün); revoked_kids, acil durum yenilemesiyle JWKS'ten kaldırılan anahtarlardır; removed_kids ise 7 günlük süresi dolmuş ve aynı adımda JWKS'ten çıkmış emekli anahtarlardır.

{
  "mode": "immediate",
  "use": "token_signing",
  "activated_kid": "ypeBEsobvcr6wjGzmiPcTaeG7_gUfE5yuYB3ha_uSLs",
  "next_kid": "GKw-c0PwFokMUQ6T-TUmEWnZ4_VlQ2Qpgw-vCTT0-OQ",
  "retired_kids": ["PiPoFgA5WUoziU9lZOGxNIu9egCI1CxKy3PurtWcAJ0"],
  "revoked_kids": [],
  "removed_kids": ["Ln0sA6lQeuJl7PW1NWiFpTOTogKdJBOUmXJloaJa78Y"],
  "revoke_sessions": false
}

Hatalar

HTTP kod Ne zaman
400 unknown_field Gövde bilinmeyen bir alan içeriyor.
400 malformed_request Gövde geçerli bir JSON değil veya Idempotency-Key başlığı hatalı ya da tekrarlanmış.
403 insufficient_permissions Kimlik bilgisi signing-keys:write iznine sahip değil veya acil durum modu, açıkça verilmiş signing-keys:emergency olmadan istendi.
404 not_found connection_id bu ortama ait hiçbir SAML bağlantısını belirtmiyor.
409 connection_keys_not_dedicated connection_id, ortamın SP anahtarlarını kullanan bir bağlantıyı belirtiyor.
409 next_key_too_young Bir algoritma değişikliği bekliyor ve next anahtarı 7 günden kısa süre önce yayımlanmış veya (federasyon anahtarı, immediate) next anahtarı 7 günden kısa süre önce yayımlanmış.
409 conflict Ortamın yayımlanmış bir next anahtarı yok, federasyon use için etkin bir anahtarı yok veya önceki federasyon anahtarı hâlâ 30 günlük geçiş süresinde.
415 unsupported_media_type İçerik türü application/json değil.
422 validation_failed Bir alan eksik veya geçersiz; işaretçi alanı belirtir, örneğin /reason.
422 idempotency_key_reuse Idempotency-Key daha önce farklı bir gövdeyle kullanılmış.
501 not_implemented İşlem bu dağıtımda henüz kullanılamıyor.
401 unauthenticated Kimlik bilgisi eksik, geçersiz veya iptal edilmiş.
429 rate_limited Hız sınırı aşıldı; Retry-After süresinin ardından yeniden deneyin.
503 service_unavailable Bir bağımlılık geçici olarak kullanılamıyor; Retry-After süresinin ardından yeniden deneyin.

Örnek

Normal yenileme:

curl -X POST "https://api.eu.keenauth.com/v1/signing-keys:rotate" \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"mode":"immediate"}'

signing-keys:write ve signing-keys:emergency iznini veren kısıtlı bir anahtarla acil durum yenilemesi:

curl -X POST "https://api.eu.keenauth.com/v1/signing-keys:rotate" \
  -H "Authorization: Bearer $KEENAUTH_EMERGENCY_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"mode":"emergency","revoke_sessions":true,"reason":"INC-2041 key exposure"}'

Yayımlanmış next anahtarını da iptal eden, SAML SP imzalama anahtarının acil durum yenilemesi:

curl -X POST "https://api.eu.keenauth.com/v1/signing-keys:rotate" \
  -H "Authorization: Bearer $KEENAUTH_EMERGENCY_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"mode":"emergency","use":"saml_sp_signing","revoke_next":true,"reason":"INC-2042 SP key exposure"}'

Bir bağlantının kendine özgü SAML SP imzalama anahtarının acil durum yenilemesi:

curl -X POST "https://api.eu.keenauth.com/v1/signing-keys:rotate" \
  -H "Authorization: Bearer $KEENAUTH_EMERGENCY_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"mode":"emergency","use":"saml_sp_signing","connection_id":"conn_01h2xcejqtf2nbrexx3vqjhp41","reason":"INC-2043 connection key exposure"}'