> ## Documentation Index
> Fetch the complete documentation index at: https://docs.flextell.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# OpenID Connect

> Discovery belgesini, id_token'ı, UserInfo endpoint'ini, JWKS'yi ve çıkış akışını anlatır.

Flextell oturum açma işlemini OAuth 2.0 ve OpenID Connect (OIDC) ile yürütür. Kimlik sunucusu `openid` scope'u istendiğinde access token'ın yanında kullanıcıyı tanımlayan bir `id_token` döndürür. Bu sayfa, uygulamanızın kimlik sunucusunu otomatik keşfetmesi, `id_token`'ı doğrulaması, kullanıcı bilgisini okuması ve oturumu kapatması için gereken adımları anlatır.

Yetkilendirme kodu akışının kendisi için [Yetkilendirme kodu ve PKCE](/api/kimlik-dogrulama/yetkilendirme-kodu-ve-pkce) sayfasına bakın. Ortam adresleri [Ortamlar](/api/ortamlar) sayfasındadır.

| Ortam | Issuer |
| - | - |
| Üretim | `https://id.flextell.ai` |
| Geliştirme (sandbox) | `https://iddev.flextell.ai` |

## Discovery belgesi

Issuer adresinin altındaki `/.well-known/openid-configuration` yolu herkese açıktır ve kimlik doğrulama gerektirmez. OIDC kütüphaneniz yalnızca issuer adresini bilerek tüm endpoint'leri bu belgeden okuyabilir.

```bash theme={null}
curl https://id.flextell.ai/.well-known/openid-configuration
```

Üretim ortamının yanıtı (`scopes_supported` listesi kısaltılmıştır):

```json theme={null}
{
  "issuer": "https://id.flextell.ai",
  "authorization_endpoint": "https://id.flextell.ai/oauth/authorize",
  "token_endpoint": "https://id.flextell.ai/oauth/token",
  "userinfo_endpoint": "https://id.flextell.ai/oauth/userinfo",
  "jwks_uri": "https://id.flextell.ai/oauth/jwks",
  "end_session_endpoint": "https://id.flextell.ai/oauth/logout",
  "grant_types_supported": ["authorization_code", "client_credentials", "refresh_token"],
  "response_types_supported": ["code"],
  "subject_types_supported": ["public"],
  "id_token_signing_alg_values_supported": ["RS256"],
  "token_endpoint_auth_methods_supported": ["client_secret_basic", "client_secret_post"],
  "code_challenge_methods_supported": ["plain", "S256"],
  "scopes_supported": ["openid", "profile", "email", "phone", "customers:read", "..."]
}
```

| Alan | Anlamı |
| - | - |
| `response_types_supported` | Yalnızca `code`. Yanıtlar her zaman sorgu dizesiyle (query string) döner. |
| `code_challenge_methods_supported` | `S256` ve `plain`. `S256` kullanın. |
| `scopes_supported` | OIDC scope'ları ile Flextell'in tüm API scope'ları. Ayrıntı için [Scope'lar](/api/kimlik-dogrulama/scopelar). |

<Note>
  Belge `claims_supported`, `revocation_endpoint` ve `introspection_endpoint` alanlarını içermez. Flextell'de `/oauth/revoke` ve introspection endpoint'i yoktur.
</Note>

## id\_token

`id_token`, yalnızca yetkilendirme isteğinde `openid` scope'u varsa `POST /oauth/token` yanıtında gelir. `openid` olmadan istenen token yanıtında `id_token` bulunmaz.

```json theme={null}
{
  "scope": "openid profile email account:read customers:read",
  "id_token": "eyJ...",
  "token_type": "Bearer",
  "expires_in": 300,
  "access_token": "eyJ...",
  "refresh_token": "..."
}
```

`id_token`, RS256 ile imzalanmış bir JWT'dir. Geçerlilik süresi 1 saattir ve sabittir. Access token'ın süresi (`expires_in`, üretimde yaklaşık 300 saniye) bundan bağımsızdır. Ayrıntı için [Tokenlar](/api/kimlik-dogrulama/tokenlar).

| Claim | Ne zaman gelir | Açıklama |
| - | - | - |
| `iss` | Her zaman | Issuer adresi (`https://id.flextell.ai`). |
| `aud` | Her zaman | Uygulamanızın `client_id` değeri. |
| `sub` | Her zaman | Kullanıcının kimliği. |
| `iat`, `exp` | Her zaman | Düzenlenme ve bitiş zamanı. |
| `nonce` | Yetkilendirme isteğinde gönderdiyseniz | Gönderdiğiniz değer. |
| `name` | `profile` scope'u | Kullanıcının adı. |
| `email`, `email_verified` | `email` scope'u | E-posta adresi ve doğrulanmış olup olmadığı. |
| `phone_number` | `phone` scope'u | Telefon numarası. |

<Warning>
  `auth_time`, `azp` ve `at_hash` claim'leri üretilmez. Ayrıca `refresh_token` ile yenilemede dönen yeni `id_token` `nonce` içermez. `nonce` kontrolünü yalnızca yetkilendirme kodunu değiştirdiğiniz ilk yanıtta yapın.
</Warning>

`openid`, `profile`, `email` ve `phone` scope'ları her uygulama için kullanılabilir; uygulamanızın scope listesine eklemeniz gerekmez.

## UserInfo

`GET /oauth/userinfo`, access token'ın sahibini döndürür. İstek `Authorization: Bearer <access_token>` başlığı ister.

```bash theme={null}
curl https://id.flextell.ai/oauth/userinfo \
  -H "Authorization: Bearer <access_token>"
```

```json theme={null}
{
  "sub": "123",
  "name": "Ayşe Yılmaz",
  "email": "ayse@example.com",
  "email_verified": true
}
```

Yanıt, access token'ın scope'larına göre süzülür.

| Scope | Dönen alanlar |
| - | - |
| (her zaman) | `sub` |
| `profile` | `name` |
| `email` | `email`, `email_verified` |
| `phone` | `phone_number` |

Değeri boş olan alanlar yanıtta yer almaz. `sub=` gibi sorgu parametreleri yok sayılır. Token geçersiz ya da süresi dolmuşsa endpoint `401` ve `{"message":"Unauthenticated."}` döndürür.

## JWKS ve imza doğrulama

`jwks_uri` altındaki `GET /oauth/jwks` herkese açıktır ve imza doğrulama için genel anahtarı verir.

```json theme={null}
{
  "keys": [
    { "alg": "RS256", "kty": "RSA", "use": "sig", "n": "...", "e": "AQAB" }
  ]
}
```

<Info>
  Anahtar kümesi tek bir anahtar içerir ve anahtarda `kid` alanı yoktur. `id_token` başlığında da `kid` bulunmaz. Anahtarı `kid` ile eşleştirmeye çalışan bir kütüphane kullanıyorsanız, tek anahtarı doğrudan kullanacak şekilde ayarlayın.
</Info>

Aldığınız `id_token`'ı şu sırayla doğrulayın.

<Steps>
  <Step title="İmzayı doğrulayın">
    JWT'yi RS256 algoritması ve `/oauth/jwks` adresindeki anahtarla doğrulayın. Algoritmayı belgeden okuyun; token başlığındaki `alg` değerine güvenmeyin.
  </Step>

  <Step title="iss değerini kontrol edin">
    `iss`, kullandığınız ortamın issuer adresine (`https://id.flextell.ai` veya `https://iddev.flextell.ai`) eşit olmalıdır.
  </Step>

  <Step title="aud değerini kontrol edin">
    `aud`, uygulamanızın `client_id` değerine eşit olmalıdır.
  </Step>

  <Step title="nonce değerini kontrol edin">
    Yetkilendirme isteğinde gönderdiğiniz `nonce` ile `id_token` içindeki değer aynı olmalıdır.
  </Step>

  <Step title="exp değerini kontrol edin">
    `exp` gelecekte olmalıdır. Süresi dolan `id_token`'ı kullanıcı oturumu için kabul etmeyin.
  </Step>
</Steps>

<Warning>
  Access token'lar da RS256 ile imzalanmış JWT'lerdir ancak `iss` claim'i taşımazlar. Access token'ı istemci tarafında çözümleyip içeriğine güvenmeyin; kullanıcı bilgisi için `id_token` veya UserInfo endpoint'ini kullanın.
</Warning>

## Çıkış akışı

Flextell, RP-initiated logout destekler. Uygulamanız **tarayıcıyı** `end_session_endpoint` adresine yönlendirir; sunucudan sunucuya `POST` ile çıkış yapılamaz.

```text theme={null}
https://id.flextell.ai/oauth/logout
  ?id_token_hint=<id_token>
  &post_logout_redirect_uri=https%3A%2F%2Fexample.com%2Flogged-out
  &state=<state>
```

| Parametre | Açıklama |
| - | - |
| `id_token_hint` | Kullanıcının `id_token`'ı. İmzası doğrulanır. Süresi dolmuş token kabul edilir, çünkü yalnızca kullanıcıyı ve uygulamayı tanımlamak için kullanılır. |
| `post_logout_redirect_uri` | Çıkıştan sonra dönülecek adres. Uygulamanızda kayıtlı `post_logout_redirect_uris` listesindeki bir adresle birebir aynı olmalıdır. |
| `state` | Opak bir değer. Yönlendirmede aynen geri gelir. |

Kayıtlı yönlendirme adreslerini uygulamayı oluştururken veya güncellerken `post_logout_redirect_uris` alanıyla tanımlarsınız. Bkz. [Uygulama oluşturma](/api/kimlik-dogrulama/uygulama-olusturma).

Akış, uygulamanızın türüne göre değişir.

<Tabs>
  <Tab title="Birinci taraf uygulama">
    Geçerli bir `id_token_hint` varsa çıkış `GET` isteğinde hemen yapılır. Kullanıcı `post_logout_redirect_uri?state=...` adresine yönlendirilir.
  </Tab>

  <Tab title="Üçüncü taraf uygulama">
    Kullanıcı **Çıkış Yapmak İstiyor musunuz?** onay sayfasını görür ve **Çıkış Yap** düğmesine basar. Ardından kayıtlı `post_logout_redirect_uri` adresine `state` ile yönlendirilir. **İptal** düğmesi kullanıcıyı geri döndürür.
  </Tab>
</Tabs>

Çıkış şunları yapar.

* Geçerli bir `id_token_hint` varsa o kullanıcının, o uygulamaya ait tüm geçerli access token'larını ve refresh token'larını iptal eder.
* Kimlik sunucusundaki oturumu yalnızca bu cihazda kapatır. Kullanıcının diğer cihazlardaki oturumları açık kalır.
* `post_logout_redirect_uri` kayıtlı bir adresle eşleşmiyorsa kullanıcıyı yönlendirmez; **Çıkış Yapıldı** sayfasını gösterir.

<Note>
  `id_token_hint` yoksa veya geçersizse hiçbir token iptal edilmez ve `post_logout_redirect_uri` yok sayılır. Kullanıcı her durumda onay sayfasını görür. `client_id` parametresi kabul edilir ama kullanılmaz; uygulama `id_token_hint` içindeki `aud` değerinden bulunur.
</Note>

Token'ları çıkış dışında iptal etmenin yolları için [Tokenlar](/api/kimlik-dogrulama/tokenlar) sayfasına bakın. Protokol hataları için [Kimlik doğrulama hataları](/api/kimlik-dogrulama/hatalar) sayfasını kullanın.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.