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 |