
# SAML bağlantısı için IdP kaynaklı oturum açmayı ayarlayın

`PUT /v1/connections/{connection_id}/idp-initiated` · izin `connections:write`

Kurumsal bir SAML bağlantısı için IdP kaynaklı oturum açmaya (kimlik sağlayıcının uygulama portalından gönderilen, istenmemiş bir SAML yanıtı) izin verir veya bunu kapatır ve kullanıcıların açabileceği uygulamaları belirler. Varsayılan olarak kapalıdır.

- **Tam değiştirme:** Her istek üç alanın tümünü yazar. Gönderilmeyen `idp_initiated_default_application_id` ve boş bir `idp_initiated_allowed_application_ids` temizlenir.
- **Hedefler:** Her uygulama bu ortamda bulunmalı, kullanıcıları bir tarayıcı üzerinden oturum açtırmalı (makineden makineye, yönetim veya istemci kimliği meta veri belgesi istemcisi değil) ve bir `initiate_login_uri` değerine sahip olmalıdır. Oturum açıldıktan sonra tarayıcı, `iss` parametresiyle birlikte bu adrese yönlendirilir ve uygulama kendi yetkilendirme isteğini `state` ve PKCE ile başlatır.
- **RelayState:** Kimlik sağlayıcı bir RelayState gönderdiğinde, bu değer yalnızca uygulamanın `client_id` değerine bayt bayt eşitse ve uygulama varsayılan uygulama ya da izin verilen listedeki bir uygulama ise bir uygulamayı seçer. RelayState hiçbir zaman URL olarak değerlendirilmez.
- **Güvenlik:** Bu ayar, kullanıcılarınızın başlatmadığı yanıtları kabul eder. Bu nedenle bir kontrol paneli kullanıcısının yeni bir adım doğrulaması yapması ve `owner` veya `admin` rolüne sahip olması gerekir. Yönetici Portalı bu ayarı değiştiremez.

## İstek

| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
| `connection_id` | path | evet | Kurumsal SAML bağlantı kimliği (`conn_…`). |
| `If-Match` | header | hayır | Bağlantının `ETag` değeri. Eski bir değer `412` ile sonuçlanır. |
| `allow_idp_initiated` | boolean | evet | İstenmemiş SAML yanıtlarını kabul eder. `true` olduğunda `idp_initiated_default_application_id` gereklidir. |
| `idp_initiated_default_application_id` | string \| null | etkinleştirildiğinde | RelayState boş olduğunda kullanılan uygulama (`app_…`). |
| `idp_initiated_allowed_application_ids` | array | hayır | RelayState'in seçebileceği uygulamalar (`app_…`); benzersiz olmalı, en fazla 20 adet. |

## Yanıt

Bağlantıyla birlikte `200 OK` (bkz. [Bir bağlantıyı alın](../connections/get.md)) ve yeni `ETag` değeri döner. Bağlantı, kaydedilen değerleri `allow_idp_initiated`, `idp_initiated_default_application_id` ve `idp_initiated_allowed_application_ids` alanlarında gösterir.

## Hatalar

| HTTP | kod | Ne zaman |
|---|---|---|
| 404 | `not_found` | Bağlantı bu ortamda mevcut değil. |
| 412 | `precondition_failed` | `If-Match` geçerli sürümle eşleşmiyor. |
| 422 | `validation_failed` | Bağlantı kurumsal bir SAML bağlantısı değil, etkinken varsayılan uygulama eksik ya da bir uygulama hedef kurallarını karşılamıyor. `errors[]` ilgili alanı gösterir. |
| 400 | `unknown_field` | İstek gövdesinde bilinmeyen bir alan var. |
| 401 | `unauthenticated` | Kimlik bilgisi eksik, geçersiz ya da iptal edilmiş. |
| 403 | `insufficient_permissions` | Kimlik bilgisi gerekli izne sahip değil. |
| 403 | `step_up_required` | Bir kontrol paneli kullanıcısı yakın zamanda adım doğrulaması tamamlamadı. |
| 429 | `rate_limited` | Hız sınırı aşıldı; `Retry-After` süresinden sonra yeniden deneyin. |
| 503 | `service_unavailable` | Bir bağımlılık geçici olarak kullanılamıyor; `Retry-After` süresinden sonra yeniden deneyin. |

## Örnek

```bash
curl -X PUT "https://api.eu.keenauth.com/v1/connections/conn_01j9xp6q0r1s5t7v9w1x3y5z7b/idp-initiated" \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -d '{"allow_idp_initiated":true,"idp_initiated_default_application_id":"app_01j9xp6q0r1s5t7v9w1x3y5z7c","idp_initiated_allowed_application_ids":["app_01j9xp6q0r1s5t7v9w1x3y5z7c"]}'
```

```bash
keenauth connections idp-initiated put conn_01j9xp6q0r1s5t7v9w1x3y5z7b --data '{"allow_idp_initiated":false}'
```
