> For the complete documentation index, see [llms.txt](https://docs.kangal.dev/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.kangal.dev/tr/organizasyon-ve-erisim/sso-scim.md).

# SSO ve SCIM

Kurumsal kimlik tenant kapsamlıdır. Bir tenant; bir OIDC veya SAML sağlayıcısına, atanmış bir ya da daha fazla e-posta alan adına, süreli davetlere ve birbirinden bağımsız iptal edilebilen birden fazla SCIM Bearer token'ına sahip olabilir.

**Sağlayıcı**, **Davetler** ve **SCIM** bölümlerini yönetmek için `/<locale>/dashboard/admin/identity` adresini açın.

## Başlamadan önce

* Hedef tenant'ta `admin` veya `super_admin` hesabı kullanın.
* Herkese açık API ve konsol origin'lerini operatörle doğrulayın.
* Kuruluşun e-posta alan adlarını ayırın. Bir alan adı, dağıtım genelinde yalnızca bir kurumsal sağlayıcıya ait olabilir.
* Yeni kullanıcılar için davet gerekip gerekmediğine veya JIT ile oluşturulup oluşturulamayacağına karar verin.
* İstemci gizli bilgilerini, sertifikaları, davet bağlantılarını ve Bearer token'larını yalnızca onaylı sistemlerde saklayın.
* OIDC/SAML callback state'i ve tekrar saldırısı koruması için tüm API replica'larında paylaşılan Redis kullanın. Herkese açık origin ve şifreleme yapılandırmasını dağıtım genelinde tutarlı tutun.

Sağlayıcı istemci gizli bilgileri ve SAML imzalama sertifikaları depolama sırasında şifrelenir. Yönetici yanıtları, saklanan gizli bilgi veya sertifika değeri yerine yapılandırma durumunu ya da sertifika parmak izini gösterir.

## OIDC iş akışı

1. **Sağlayıcı** bölümünde **OpenID Connect** seçeneğini seçin.
2. Görünen adı ve virgülle ayrılmış doğrulanmış e-posta alan adlarını girin.
3. HTTPS issuer, isteğe bağlı discovery URL, istemci kimliği ve istemci gizli bilgisini girin.
4. **Etkin**, JIT politikası ve varsayılan rolü seçin.
5. Kimlik sağlayıcısında şu yönlendirme URI'sini kaydedin:

```
https://<public-api-origin>/auth/enterprise/oidc/callback
```

6. Kaydedin ve JIT'i geniş ölçekte etkinleştirmeden önce davetli bir kullanıcıyla test edin.

Discovery URL verilmezse Kangal `<issuer>/.well-known/openid-configuration` adresini kullanır. Authorization code akışı PKCE S256, state ve nonce kullanır. Discovery, authorization, token ve JWKS endpoint'leri güvenli ve herkese açık HTTPS hedefleri olmalıdır. ID token; onaylı asimetrik imzaya, beklenen issuer ve audience değerlerine, zorunlu zaman alanlarına, eşleşen nonce değerine, subject'e ve atanmış alan adında doğrulanmış bir e-postaya sahip olmalıdır.

## SAML 2.0 iş akışı

1. **SAML 2.0** seçeneğini seçin.
2. IdP entity ID, HTTPS HTTP-Redirect SSO URL ve PEM X.509 imzalama sertifikasını girin.
3. Sağlayıcıyı kaydedin.
4. Servis sağlayıcı metadatasını şu adresten içe aktarın:

```
https://<public-api-origin>/auth/enterprise/saml/metadata/<provider-id>
```

5. Assertion consumer service URL'sini şu şekilde yapılandırın:

```
https://<public-api-origin>/auth/enterprise/saml/callback
```

Kangal; imzalı assertion, eşleşen audience ve recipient, geçerli conditions, beklenen `InResponseTo`, NameID veya e-posta niteliği ve benzersiz assertion ID ister. İstek state'i ve assertion tekrar kayıtları tek kullanımlıktır.

Kangal, SP tarafından başlatılan SAML akışını kullanır. IdP tarafından kendiliğinden gönderilen yanıtlar reddedilir. Standart Kangal çıkışını IdP'nin kendi oturum kontrolleriyle birlikte kullanın.

## Davetler ve JIT

Bir davet `user`, `admin_readonly` veya `admin` rolünü seçer ve bir saat ile 30 gün arasında geçerlilik süresine sahip olabilir. Konsol davetleri 72 saat geçerlidir.

Aynı tenant ve e-posta için yeni bir bekleyen davet oluşturmak öncekini iptal eder. Kabul URL'si tek kullanımlık bir kimlik bilgisi içerir. Kabul işlemi tenant hesabını atomik olarak oluşturur ve daveti tüketir; bağlantı yeniden kullanılamaz. E-posta teslimatı kullanılamıyorsa oluşturma yanıtı, güvenli biçimde elle iletmek için bağlantıyı yine de sağlayabilir.

Davet oluşturma ve e-posta teslimatı ayrı adımlardır. Arka plandaki e-posta teslimatı başarısız olsa da davet kaydı geçerli kalır; operatör teslimatı doğrulamalı veya yanıtta dönen kabul bağlantısını onaylı ve güvenli bir kanaldan iletmelidir.

JIT devre dışıyken yeni SSO kimliğinin geçerli ve bekleyen bir daveti olmalıdır. JIT etkinken atanmış alan adındaki uygun e-posta, sağlayıcının varsayılan rolünü alır. Aynı tenant'taki mevcut hesaplar e-postayla bağlanır; başka bir tenant'a önceden bağlanmış kimlik reddedilir.

## SCIM sağlama

### Token oluşturma ve yenileme

1. **SCIM** bölümünü açıp **Token oluştur** seçeneğini seçin.
2. Açıklayıcı bir ad girin.
3. Bearer değerini hemen kopyalayın; yalnızca bir kez gösterilir.
4. Kimlik sağlayıcısını konsolda gösterilen temel URL ve şu başlıklarla yapılandırın:

```
Authorization: Bearer <one-time-visible-scim-token>
Content-Type: application/scim+json
```

API, 1 ile 730 gün arasında geçerli token oluşturabilir; konsol 365 gün kullanır. Yenileme; yeni token oluşturma, dizini güncelleme, test etme ve eski token'ı iptal etme adımlarından oluşur. Envanterde önek, durum, bitiş zamanı, son kullanım ve iptal zamanı gösterilir.

### Desteklenen API

Temel yol `/admin/scim/v2` değeridir.

| Kaynak       | İşlemler                                                                        |
| ------------ | ------------------------------------------------------------------------------- |
| Keşif        | `ServiceProviderConfig`, `ResourceTypes`, `Schemas`                             |
| Kullanıcılar | Oluşturma, listeleme, getirme, değiştirme, patch uygulama ve devre dışı bırakma |
| Gruplar      | Oluşturma, listeleme, getirme, değiştirme, üyelere patch uygulama ve silme      |

Listeler, 1'den başlayan `startIndex` ve en fazla 200 olabilen `count` kullanır. Desteklenen filtreler basit `eq` ifadeleridir:

* Kullanıcılar: `userName`, `externalId`, `id` veya `emails.value`.
* Gruplar: `displayName`, `externalId` veya `id`.

```bash
export KANGAL_URL='https://api.example.com'
export KANGAL_SCIM_TOKEN='<scim-token>'

curl --get "$KANGAL_URL/admin/scim/v2/Users" \
  --header "Authorization: Bearer $KANGAL_SCIM_TOKEN" \
  --header 'Accept: application/scim+json' \
  --data-urlencode 'filter=userName eq "alice"' \
  --data-urlencode 'startIndex=1' \
  --data-urlencode 'count=100'
```

### Tenant ve hesap davranışı

SCIM token'ı tenant'ı sabitler. Sorgu parametreleri, `X-Tenant-ID` veya payload içindeki `tenantId` başka bir tenant seçemez. Tenant'lar arası denemeler SCIM hatası döndürür.

SCIM ile oluşturulan kullanıcılar doğrudan `user` rolü ve üretilmiş bir parolayla başlar. `active` değerini false yapmak veya bir User kaydını silmek, hesabı devre dışı bırakır ve kullanıcının ilgili tenant'taki tüm erişim oturumlarıyla yenileme token'larını iptal eder. Silme işlemi fiziksel kullanıcı kaldırma değil, mantıksal kullanımdan kaldırmadır.

SCIM Groups üyeliği saklar ve her SCIM User kaydının `groups` niteliğinde görünür. Bunlar Kangal RBAC ekiplerinden ayrıdır; doğrudan hesap rolü veya izin matrisi erişimi otomatik olarak vermez.

## Denetim ve güvenlik

Sağlayıcı değişiklikleri, davetler, SCIM token yaşam döngüsü ve SCIM kullanıcı veya grup değişiklikleri denetim günlüğüne yazılır. Ham davet ve SCIM Bearer değerleri, anahtarlı blind index olarak saklanır ve denetim kayıtlarında maskelenir.

## Sorun giderme

| Belirti                                      | Kontrol                                                                                                         |
| -------------------------------------------- | --------------------------------------------------------------------------------------------------------------- |
| Alan adı zaten atanmış                       | Alan adı başka bir tenant sağlayıcısına aittir; yeniden denemeden önce sahipliği çözün.                         |
| Sağlayıcı durumu eksik                       | OIDC istemci gizli bilgisini veya geçerli SAML imzalama sertifikasını girin.                                    |
| OIDC metadata isteği başarısız               | Issuer ve discovery endpoint'leri HTTPS olmalı, erişilebilir olmalı ve eşleşen issuer metadatası döndürmelidir. |
| OIDC doğrulanmış e-posta hatası              | IdP'nin `email` ve `email_verified: true` değerlerini gönderdiğinden emin olun.                                 |
| SAML yanıtı reddediliyor                     | Audience, ACS recipient, istek kimliği, conditions, imzalama sertifikası ve saat ayarlarını doğrulayın.         |
| Davet geçersiz veya süresi dolmuş            | Yeni davet oluşturun; bağlantılar tek kullanımlıdır ve yenisi eski bekleyen bağlantıları iptal eder.            |
| SSO kullanıcının davetli olmadığını söylüyor | JIT devre dışıdır ve doğrulanmış e-postayla eşleşen geçerli davet yoktur.                                       |
| SCIM `401` döndürüyor                        | Bearer değeri eksik, süresi dolmuş veya iptal edilmiştir. Önek yerine tam token'ı kullanın.                     |
| SCIM `invalidFilter` döndürüyor              | Desteklenen tek bir alanla basit `eq` ifadesi kullanın.                                                         |
| Grup eşitleme konsol erişimini değiştirmedi  | SCIM Groups, RBAC ekiplerine veya doğrudan rollere eşlenmez.                                                    |
| SCIM temel URL'si üretilemiyor               | Operatör, onaylı bir herkese açık API origin'i yapılandırmalıdır.                                               |

Canlıya geçmeden önce seçilen IdP üzerinde metadata içe aktarma, sertifika veya anahtar yenileme, nitelik adları, grup davranışı, çıkış beklentileri ve sağlayıcıya özgü SCIM filtre isteklerini test edin.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.kangal.dev/tr/organizasyon-ve-erisim/sso-scim.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
