Kimlik Doğrulama — JWT

JWT tabanlı erişim token'ları, yenileme akışı, şifre yönetimi ve güvenlik önlemleri.

JWT Kimlik Doğrulama

Flowvio, RFC 7519 standardındaki JSON Web Token (JWT) kullanır. Stateless ve ölçeklenebilir bu yapı, her API isteğinde oturum verisi için merkezi depolamaya ihtiyaç duymaz. Token'lar imzalanmış veri paketleridir; sunucu her token'ı imzadan doğrulayabilir.

Token Türleri

  • Access Token: Kısa ömürlü (varsayılan 60 dakika). Her API isteğinin Authorization header'ına eklenir. Süresi dolunca yenileme token'ı ile değiştirilir.
  • Refresh Token: Uzun ömürlü (varsayılan 7 gün). Yalnızca yeni access token almak için kullanılır. Çıkış yapılınca kara listeye alınır.

Giriş Akışı

  1. Kullanıcı e-posta ve şifresini gönderir: POST /api/auth/login/
  2. Sunucu kimliği doğrular ve access + refresh token çifti döner
  3. İstemci token'ları güvenli depolamaya kaydeder
  4. Sonraki her API isteğine Authorization: Bearer <access_token> eklenir
  5. Access token süresi dolduğunda POST /api/auth/token/refresh/ ile yenilenir
  6. Kullanıcı çıkış yaptığında POST /api/auth/logout/ refresh token'ı kara listeye alır

Kaba Kuvvet Koruması

django-axes entegrasyonu ile art arda başarısız giriş denemeleri izlenir ve otomatik engelleme uygulanır:

  • 5 başarısız denemeden sonra hesap geçici kilitlenir
  • Kilitlenme süresi yapılandırılabilir (varsayılan: 30 dakika)
  • IP bazlı veya kullanıcı adı bazlı izleme
  • Başarısız girişler denetim loguna yazılır

Şifre Yönetimi

Şifre işlemleri için aşağıdaki endpoint'ler kullanılır:

İşlemEndpoint
Şifre değiştirme (giriş yapmış kullanıcı)POST /api/auth/change-password/
Şifre sıfırlama talebi (e-posta gönder)POST /api/auth/password-reset/
Şifre sıfırlama (token ile)POST /api/auth/password-reset-confirm/

E-posta Doğrulama

Yeni hesap oluşturulduğunda kayıt e-postasına doğrulama bağlantısı gönderilir. E-posta doğrulanmadan hesap tam yetkiyle kullanılamaz. Doğrulama bağlantısı 24 saat geçerlidir; süresi dolunca yeni bağlantı talep edilebilir.

Mevcut Kullanıcı Bilgisi

GET /api/auth/me/

Yanıt:
{
  "id": 42,
  "email": "kullanici@sirket.com",
  "first_name": "Ahmet",
  "last_name": "Yılmaz",
  "roles": ["Satış Uzmanı"],
  "permissions": ["task.view", "task.create", ...],
  "organization_unit": { "id": 5, "name": "İstanbul Satış" }
}

# Kullanıcının erişebileceği menüler
GET /api/auth/menu/

Deneme Hesabı Yönetimi

Deneme sürümü kaydı ve yönetimi için ayrı endpoint'ler kullanılır:

  • POST /api/trial/register/ — Yeni deneme hesabı oluştur (kimlik doğrulama gerektirmez)
  • GET /api/trial/status/ — Deneme süresi durumu ve kalan gün
  • POST /api/trial/extend/ — Deneme süresini uzat (yönetici yetkisi)

Deneme süresi bittiğinde hesap kısıtlanır. 2 kez 7 günlük uzatma hakkı tanınabilir.