Skip to main content
Token iptali, bir access token veya refresh token’ı süresi dolmadan önce geçersiz kılmak için kullanılır. Tipik senaryolar:
  • Kullanıcı uygulamanızdan çıkış yaptı
  • Kullanıcı cihazını kaybetti ve siz ön taraftan “tüm oturumları sonlandır” tetikliyorsunuz
  • Güvenlik olayı nedeniyle kullanıcının tüm token’larını temizliyorsunuz
Bir kullanıcı Flextell panelinden uygulamanıza verdiği yetkiyi geri çekerse, o uygulamaya ait tüm access ve refresh token’lar anında iptal edilir. Bu durumda ek bir istek atmanıza gerek yoktur.

OpenID Connect ile oturum sonlandırma

Kullanıcıyı “Flextell’den çıkış yaptır + bana geri yönlendir” akışıyla logout etmek için OpenID Connect RP-Initiated Logout 1.0 standardındaki end_session_endpoint kullanılır. Flextell’in end_session_endpoint’i:
https://dev.flextell.ai/oauth/logout
Bu URL’i kod tarafında sabitlemek yerine discovery URL’den (end_session_endpoint alanı) dinamik çekmenizi öneririz.

İstek

Kullanıcıyı tarayıcı üzerinden aşağıdaki URL’e yönlendirin:
GET https://dev.flextell.ai/oauth/logout
  ?id_token_hint=KULLANICININ_ID_TOKENI
  &post_logout_redirect_uri=https%3A%2F%2Fapp.example.com%2Fgoodbye
  &state=RASTGELE
  &client_id=SIZIN_CLIENT_ID
id_token_hint
string
Daha önce kullanıcıya verilmiş id_token değeri. Flextell bu token’ın imzasını RS256 ile doğrular; sub (kullanıcı) ve aud (client_id) claim’lerini çıkarır. Süresi dolmuş id_token’lar da kabul edilir — spec gereğince bu token yalnızca kimlik tespiti için kullanılır, yetkilendirme için değil.
post_logout_redirect_uri
string
Çıkış sonrası kullanıcının yönlendirileceği URL. Uygulamanızın panelinde kayıtlı Çıkış Sonrası Yönlendirme URI’leri listesindeki bir değerle birebir eşleşmelidir. Eşleşmezse Flextell bu parametreyi yok sayar ve kullanıcıyı kendi onay sayfasına yönlendirir.
state
string
Callback’te post_logout_redirect_uri’ye aynen eklenip geri dönen opak değer. CSRF koruması için rastgele üretip dönüşte karşılaştırın.
client_id
string
id_token_hint yoksa hangi uygulama için logout olduğunu anlamak için gönderilebilir. id_token_hint varken zorunlu değildir.

Davranış — first-party vs third-party

Flextell, istekteki id_token_hint’in imzasını doğruladıktan sonra hangi client için logout yapıldığını belirler ve iki farklı yol izler:
  • First-party istemci (Flextell’in kendi uygulamaları): Onay ekranı gösterilmez, logout doğrudan yapılır ve kullanıcı (varsa) post_logout_redirect_uri’ye yönlendirilir.
  • Third-party istemci (sizin uygulamanız): Kullanıcıya “Çıkmak istediğinize emin misiniz?” onay ekranı gösterilir. Kullanıcı onayladığında POST ile logout tetiklenir. Bu, kullanıcının haberi olmadan oturumunun kapatılmasını engeller.

Ne silinir?

Onaylanmış logout tetiklendiğinde Flextell şunları yapar:
  1. O kullanıcı + o client_id için tüm aktif access token’ları revoke eder.
  2. Bu access token’lara bağlı tüm refresh token’ları revoke eder.
  3. Kullanıcının Flextell web oturumunu (session cookie ve DB kaydı) tamamen siler.

Başarılı yönlendirme

https://app.example.com/goodbye?state=RASTGELE
Eğer post_logout_redirect_uri geçersizse / listede yoksa / id_token_hint gönderilmediyse Flextell kullanıcıyı kendi “çıkış yapıldı” onay sayfasında tutar.
end_session_endpoint Flextell’deki oturumu kapatır ve o uygulama + o kullanıcı için token’ları iptal eder. Kendi veritabanınızda sakladığınız access/refresh token kayıtlarını siz de temizlemelisiniz — aksi halde elinizde geçersiz token’lar kalır.

Post-Logout Redirect URI nasıl kaydedilir?

Panelde Bağlantılar → Uygulamalar ekranında uygulamanızı düzenleyin, Çıkış Sonrası Yönlendirme URI’leri alanına logout sonrası yönlendirileceğiniz URL’leri ekleyin:
  • HTTPS zorunludur; yalnızca http://localhost ve http://127.0.0.1 istisnadır.
  • Tam eşleşme zorunludur (query string, trailing slash dahil).
  • Birden fazla URL ekleyebilirsiniz (ör. prod ve staging ayrı).
  • Native uygulamalar için custom scheme (myapp://logout-callback) kabul edilir.

Kullanıcı uygulamayı panelden kaldırırsa

Kullanıcı panelden Bağlantılar → Yetkilendirdiğim Uygulamalar ekranına gidip uygulamanıza verdiği erişimi kaldırırsa:
  • O kullanıcıya ait tüm access token’lar anında geçersizleşir
  • O kullanıcıya ait tüm refresh token’lar anında iptal edilir
  • Uygulamanız bundan sonra o kullanıcı adına yaptığı her API çağrısında 401 Unauthorized alır
  • Yeniden erişim için kullanıcıyı Authorization Code akışından tekrar geçirmelisiniz

İyi pratik: çıkış sırasında yerel temizlik

Kullanıcı uygulamanızdan çıkış yaptığında, token’ları kendi tarafınızda da temizleyin. Yalnızca cookie silmek yeterli değildir; refresh token’ı veritabanından da kaldırın:
async function logout(userId) {
  // 1. Token'ları kendi DB'nizden silin
  await db.oauthTokens.delete({ where: { userId } });

  // 2. Kullanıcıyı OIDC logout akışına gönderin
  const params = new URLSearchParams({
    post_logout_redirect_uri: "https://app.example.com/goodbye",
    state: generateState(),
  });
  return `https://dev.flextell.ai/oauth/logout?${params}`;
}

Client secret sızıntısı

client_secret sızdıysa:
  1. Hemen panelden uygulamanızı silin — mevcut tüm token’lar iptal olur.
  2. Yeni bir uygulama oluşturun; yeni client_id/client_secret alın.
  3. Kullanıcılarınızı yeni uygulama ile Authorization Code akışından tekrar geçirin.
Secret’ın sızdığı kullanım süresini mümkün olduğunca kısa tutmak için alarm/monitoring kurmak tavsiye edilir.