> ## 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.

# Token'lar: süreler, yenileme ve iptal

> Erişim ve yenileme token'larının sürelerini, yenilemeyi, scope daraltmayı ve token iptalini anlatır.

Yetkilendirme kodunu token'a çevirdikten sonra elinizde bir erişim token'ı ve bir yenileme token'ı olur. Bu sayfa token'ların ne kadar yaşadığını, süresi dolunca nasıl yenileyeceğinizi ve token'ı nasıl iptal edeceğinizi anlatır. Kod akışının kendisi için [Yetkilendirme kodu ve PKCE](/api/kimlik-dogrulama/yetkilendirme-kodu-ve-pkce) sayfasına bakın.

Token isteklerinin tamamı kimlik sunucusuna gider: `https://id.flextell.ai/oauth/token`. Ortam adresleri için [Ortamlar](/api/ortamlar) sayfasına bakın.

## Token süreleri

| Token | Süre | Not |
| - | - | - |
| Yetkilendirme kodu | 10 dakika | Tek kullanımlıktır. Kodu aldığınız istemciyle değiştirmeniz gerekir. |
| Erişim token'ı (`access_token`) | 5 dakika | Yanıttaki `expires_in` değeri `300` gelir. |
| Yenileme token'ı (`refresh_token`) | 7 gün | Her yenilemede yeni bir token verilir ve süre yeniden 7 gün olur. |
| `id_token` | 1 saat | Sabittir. Yalnızca `openid` scope'u istediyseniz gelir. |

Erişim token'ı kısa ömürlüdür. Her `/api/v1` isteğinden önce süresine bakın ya da `401 UNAUTHENTICATED` yanıtı aldığınızda token'ı yenileyip isteği tekrarlayın.

<Note>
  Erişim token'ları ve yenileme token'ları 15 gün / 30 gün yaşamaz. Eski belgelerde geçen bu değerler geçersizdir.
</Note>

## Token yenileme

Yenileme için `refresh_token` verme türünü kullanın. Gizli istemciler `client_secret` göndermelidir.

<CodeGroup>
  ```bash curl theme={null}
  curl -X POST https://id.flextell.ai/oauth/token \
    -H "Accept: application/json" \
    -d grant_type=refresh_token \
    -d refresh_token=$REFRESH_TOKEN \
    -d client_id=$CLIENT_ID \
    -d client_secret=$CLIENT_SECRET
  ```

  ```json Yanıt theme={null}
  {
    "scope": "openid profile email account:read customers:read",
    "id_token": "…",
    "token_type": "Bearer",
    "expires_in": 300,
    "access_token": "…",
    "refresh_token": "…"
  }
  ```
</CodeGroup>

Yanıt yeni bir erişim token'ı ve yeni bir yenileme token'ı içerir. `openid` scope'u verilmişse yeni bir `id_token` da gelir.

<Warning>
  Yenileme token'ları her kullanımda döner. İstek başarılı olduğunda eski yenileme token'ı ve ona bağlı erişim token'ı hemen geçersiz olur. Yeni yenileme token'ını yanıtı alır almaz kaydedin. Aynı token'ı birden çok istekle aynı anda yenilemeye çalışmayın; yalnızca biri başarılı olur.
</Warning>

Uygulamanız en az haftada bir kez yenileme yaparsa kullanıcı oturumu açık kalır. 7 gün boyunca hiç yenileme yapılmazsa kullanıcının yeniden giriş yapması gerekir.

### Yenileme hataları

Hatalar OAuth biçiminde döner: `error`, `error_description` ve bazen `hint` alanı. Genel hata biçimi için [Kimlik doğrulama hataları](/api/kimlik-dogrulama/hatalar) sayfasına bakın.

| `error` | HTTP | `hint` / ne zaman |
| - | - | - |
| `invalid_grant` | 400 | `Token has been revoked`: token zaten kullanıldı ya da iptal edildi. |
| `invalid_grant` | 400 | `Token has expired`: 7 günlük süre doldu. |
| `invalid_grant` | 400 | `Token is not linked to client`: token başka bir uygulamaya ait. |
| `invalid_grant` | 400 | `Cannot decrypt the refresh token`: token bozuk ya da eksik kopyalanmış. |
| `invalid_scope` | 400 | İstediğiniz scope ilk yetkilendirmede yoktu. |
| `invalid_client` | 401 | İstemci bilgisi yanlış ya da uygulama iptal edilmiş. |
| `invalid_request` | 400 | `refresh_token`, `client_id` ya da gizli istemci için `client_secret` eksik. |

`invalid_grant` aldığınızda yeniden denemeyin. Kullanıcıyı [yeni bir yetkilendirme akışına](/api/kimlik-dogrulama/yetkilendirme-kodu-ve-pkce) yönlendirin.

`/oauth/token` uç noktası IP başına dakikada 60 istekle sınırlıdır. API istekleri için sınırlar [Oran sınırları](/api/istekler/oran-sinirlari) sayfasındadır.

## Scope daraltma

Yenileme isteğine `scope` parametresi ekleyerek yeni erişim token'ını daha dar bir scope kümesiyle alabilirsiniz.

```bash curl theme={null}
curl -X POST https://id.flextell.ai/oauth/token \
  -H "Accept: application/json" \
  -d grant_type=refresh_token \
  -d refresh_token=$REFRESH_TOKEN \
  -d client_id=$CLIENT_ID \
  -d client_secret=$CLIENT_SECRET \
  -d scope="customers:read"
```

* `scope` göndermezseniz token önceki scope'larla yenilenir.
* `scope` içindeki her değer ilk yetkilendirmede verilmiş olmalıdır. Aksi hâlde `400 invalid_scope` döner.
* Daraltma kalıcıdır. Daraltılmış bir yenileme token'ından sonra scope'u tekrar genişletemezsiniz.
* Uygulamanızın scope listesinden sonradan çıkarılmış scope'lar, hata verilmeden yeni token'dan düşer.

<Tip>
  Bir iş parçacığı yalnızca okuma yapıyorsa ona `*:read` scope'larından oluşan daraltılmış bir token verin. Scope listesi için [Scope'lar](/api/kimlik-dogrulama/scopelar) sayfasına bakın.
</Tip>

## Yeni scope isteme

Yenileme ile yeni scope alamazsınız. Daha önce verilmemiş bir scope gerekiyorsa şu adımları izleyin.

<Steps>
  <Step title="Scope'u uygulamaya ekleyin">
    `PUT /api/v1/oauth/clients/{id}/scopes` ile uygulamanın scope listesini güncelleyin. Bu çağrı `oauth_clients:write` scope'unu, `UpdateScopes:Client` iznini ve `X-Tenant` başlığını gerektirir. Panelde **Bağlantılar → Uygulamalar** ekranındaki **Yetkileri Güncelle** işlemi de aynı işi yapar; ancak bu sürümde panelin scope seçicisi liste yüklenemediği için çalışmayabilir, bu durumda API'yi kullanın. Gövdede `scopes` dizisi bulunmalı ve liste mevcut scope'ların tamamını içermelidir; liste değiştirilir, eklenmez. Ayrıntı için [OAuth uygulamaları](/api/kaynaklar/oauth-uygulamalari) sayfasına bakın.
  </Step>

  <Step title="Kullanıcıyı yeniden yetkilendirin">
    Kullanıcıyı `/oauth/authorize` adresine, güncel scope listesiyle gönderin. Kullanıcı yeni izinleri onaylar ve yeni bir kod döner.
  </Step>

  <Step title="Kodu değiştirin">
    Kodu `/oauth/token` ile token'a çevirin. Elinizdeki eski token'ların scope'u değişmez.
  </Step>
</Steps>

Scope listesini değiştirmeniz mevcut erişim token'larını etkilemez; onlar süreleri (5 dakika) dolana kadar eski scope'larıyla çalışır. Yetkilendirme isteği ise uygulamaya izin verilmeyen ya da tanınmayan her scope için `invalid_scope` ile baştan başarısız olur.

API, token'ınızda gereken scope yoksa `403 FORBIDDEN` ve `Invalid scope(s) provided.` mesajı döndürür. Bu durumda yukarıdaki adımlarla yeniden yetkilendirin. Scope ile klinik izni ayrı kavramlardır; ayrıntı için [Kimlik doğrulama genel bakış](/api/kimlik-dogrulama/genel-bakis) sayfasına bakın.

## Token iptali

Flextell'de RFC 7009 `/oauth/revoke` uç noktası ve token introspection uç noktası yoktur. Token'ı iptal etmenin yolları aşağıdadır.

| Yol | Kim yapar | Etkisi |
| - | - | - |
| `/oauth/logout` ile oturum kapatma (`id_token_hint` ile) | Kullanıcı, tarayıcıdan | O kullanıcının o uygulamadaki tüm erişim ve yenileme token'larını iptal eder. |
| `POST /api/v1/oauth/clients/{id}/revoke` | Uygulama sahibi | Uygulamayı iptal eder ve tüm erişim token'larını geçersiz kılar. Yenileme `invalid_client` ile, API çağrıları `401` ile reddedilir. |
| `DELETE /api/v1/oauth/clients/{id}/tokens` | Uygulama sahibi | Uygulamanın tüm kullanıcılarına verilmiş erişim token'larını iptal eder. Yenileme token'larını kapsamaz. |
| `DELETE /api/v1/oauth/clients/{id}` | Uygulama sahibi | Uygulamayı, token'larını ve kodlarını siler. |
| `PUT /api/v1/account/password` ve `revoke_other_tokens: true` | Kullanıcı | Parolayı değiştirir ve isteği yapan token dışındaki tüm erişim ve yenileme token'larını iptal eder. |
| `DELETE /api/v1/account` | Kullanıcı | Hesabı siler ve tüm erişim token'larını iptal eder. |

Uygulama sahibi uç noktaları `oauth_clients:write` scope'u, `Revoke:Client` ya da `Delete:Client` izni ve `X-Tenant` başlığı gerektirir. İzin, başlıkta verdiğiniz klinikte aranır. Başlık için [Klinikler ve X-Tenant](/api/klinikler-ve-x-tenant) sayfasına bakın.

```bash curl theme={null}
curl -X POST https://app.flextell.ai/api/v1/oauth/clients/$CLIENT_ID/revoke \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "X-Tenant: 123" \
  -H "Accept: application/json"
```

Zaten iptal edilmiş bir uygulamayı tekrar iptal ederseniz `422 OAUTH_CLIENT_ALREADY_REVOKED` döner. Uygulama sahibi olmadığınız bir uygulama için yanıt `404` olur.

<Warning>
  Tüm kullanıcıları durdurmak istiyorsanız `DELETE …/tokens` yerine `POST …/revoke` kullanın. `DELETE …/tokens` yenileme token'larını iptal etmez; sahipleri yeni erişim token'ı alabilir.
</Warning>

## Oturumun sonlanması

Kullanıcı oturumu şu durumlarda biter. Her birinde sonraki yenileme `invalid_grant` ya da `invalid_client` ile reddedilir.

* Yenileme token'ı 7 gün boyunca kullanılmadı.
* Kullanıcı `/oauth/logout` ile çıkış yaptı.
* Uygulama sahibi uygulamayı iptal etti ya da sildi.
* Kullanıcı parolasını `revoke_other_tokens: true` ile değiştirdi ya da hesabını sildi.

```mermaid theme={null}
flowchart TD
  A["API isteği"] --> B{"401 UNAUTHENTICATED?"}
  B -- "Hayır" --> C["Yanıtı işleyin"]
  B -- "Evet" --> D["Yenileme token'ı ile yenile"]
  D --> E{"Başarılı?"}
  E -- "Evet" --> F["Yeni token'ları kaydet ve isteği tekrarla"]
  E -- "invalid_grant" --> G["Kullanıcıyı yeniden yetkilendir"]
```

### Çıkış yapma

Tarayıcıyı şu adrese yönlendirin:

```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
```

* `id_token_hint` ile çıkış yaparsanız uygulamanın o kullanıcıya ait token'ları iptal edilir. Parametre olmadan çıkış hiçbir token'ı iptal etmez ve `post_logout_redirect_uri` yok sayılır.
* Süresi dolmuş bir `id_token` da kabul edilir.
* Üçüncü taraf uygulamalarda kullanıcı önce **Çıkış Yap** ve **İptal** düğmeleri olan bir onay sayfası görür.
* Yönlendirme, `post_logout_redirect_uri` uygulamada kayıtlı adreslerden biriyle birebir eşleşirse yapılır. Eşleşmezse kullanıcı bir **Çıkış Yapıldı** sayfası görür.
* Çıkış yalnızca o tarayıcıdaki kimlik sunucusu oturumunu sonlandırır. Kullanıcının başka cihazlardaki oturumları açık kalabilir.

Çıkış akışının tamamı için [OpenID Connect](/api/kimlik-dogrulama/openid-connect) sayfasına bakın.


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