Kimlik Doğrulama

Invozon API, Bearer token (JWT) ile çalışır. Her istek Authorization: Bearer <token> başlığını taşır.

Token tipleri

Tip Süre Kullanım
Access token 24 saat Tüm API çağrılarında. Süre dolunca yenilenir.
Refresh token 30 gün Yeni access token üretmek için. Güvenli sakla.
API key (yakında) Süresiz Server-to-server entegrasyonlar için (revokeable).

Token alma

E-posta + şifre ile

POST /v1/auth/token
Content-Type: application/json

{
  "email": "[email protected]",
  "password": "your-password"
}

Yanıt:

{
  "access_token": "eyJhbGciOiJIUzI1NiIs...",
  "refresh_token": "rfr_abc123...",
  "token_type": "Bearer",
  "expires_in": 86400,
  "user": {
    "id": 123,
    "email": "[email protected]",
    "tenant_id": "tnt_abc123",
    "role": "owner"
  }
}

Token yenileme

Access token süresi dolduğunda 401 alırsınız. Refresh token ile yeni access token üretin:

POST /v1/auth/refresh
Content-Type: application/json

{
  "refresh_token": "rfr_abc123..."
}

Token sahipliği — Tenant izolasyonu

Her hesap tenant olarak konumlanır. Token, tek tenanta aittir; başka bir tenant'a ait veriye erişemez. Bu izolasyon API katmanında uygulanır; yanlış token + yanlış tenant_id kombinasyonu 403 forbidden döner.

Çıkış (logout)

POST /v1/auth/logout
Authorization: Bearer YOUR_TOKEN

Yanıt 204 No Content. Refresh token sunucu tarafında geçersizleştirilir.

Güvenlik notları

  • ✅ Token'ı HTTPS üzerinden taşıyın; HTTP isteği reddedilir.
  • ✅ Refresh token'ı kullanıcının cihazında (örn. iOS Keychain, browser HttpOnly cookie) saklayın; loglara yazmayın.
  • ✅ Bir cihaz veya tarayıcıda token şüpheli kullanım için revoke edilebilir: panel → Ayarlar → Aktif Oturumlar.
  • Rate limit auth endpoint'inde IP+e-posta başına aktif (bkz. Rate Limit).
  • ❌ Token'ı URL query parametresinde göndermeyin; access log'larda sızar.
  • ❌ Production'da test token'ı kullanmayın; her ortam (dev/staging/prod) için ayrı token.

Şifre güvenliği

  • Şifre en az 10 karakter olmalı.
  • Argon2id ile hashlenir; düz metin kayıt yok.
  • 5 başarısız deneme = 5 dakika kilit (IP başına 10 deneme = 5 dakika kilit).
  • Şifre değiştirme audit log'a düşer.

Operatör (superadmin) ayrımı

Tenant kullanıcıları kendi tenant verisine erişir. Sistem operatörleri (superadmin) tüm tenant'lara erişebilir. Bu ayrım role: "superadmin" claim'i ile API tarafında uygulanır; tenant kullanıcıları superadmin scope'lu endpoint'lere erişemez (403).

Hata kodları (auth)

HTTP Code Açıklama
401 auth.invalid_credentials E-posta veya şifre yanlış
401 auth.token_expired Access token süresi doldu, refresh kullan
401 auth.token_invalid Token formatı bozuk veya revoke edilmiş
403 auth.insufficient_scope Token yeterli scope'a sahip değil
429 auth.rate_limited Çok fazla deneme; 5 dakika bekle