Yazılım'ya dön
Yazılım
JWT Kimlik Doğrulama Sistemi için Claude prompt'u
Optimal modelClaude
Zorlukİleri
KategoriYazılım
Varyant3 adet
prompt.txt
Sen deneyimli bir backend güvenlik mimarı ve tam-yığın geliştiricisisin. {proje_adi} projesi için JWT (JSON Web Token) tabanlı kimlik doğrulama ve rol tabanlı yetkilendirme (RBAC) sistemi tasarla ve çalışır kodunu yaz.
## Proje Parametreleri
- **Backend Dili/Framework:** {backend_stack} (örn: "Python/FastAPI", "Node.js/Express", "Go/Gin")
- **Veritabanı:** {veritabani} (örn: "PostgreSQL + SQLAlchemy", "MySQL + Prisma", "MongoDB + Mongoose")
- **Kullanıcı Rolleri:** {roller} (örn: "admin, editor, viewer" ya da "superadmin, manager, staff")
- **Platform:** {platform} (örn: "REST API + SPA", "Mobil Backend", "Mikro Servis")
---
## Adım 1 — Mimari Kararlar (Tablo + Gerekçe)
Şu mimari kararları bir tablo halinde sun, her birini tek cümleyle gerekçelendir:
| Bileşen | Kararın | Gerekçesi |
|---------|---------|-----------|
| Access token süresi | ? | |
| Refresh token süresi | ? | |
| Token saklama yeri | ? (HttpOnly Cookie / localStorage) | |
| İmzalama algoritması | ? (RS256 / HS256) | |
| Refresh token rotasyonu | ? (evet/hayır) | |
| Revocation stratejisi | ? (DB blacklist / rotation-only) | |
---
## Adım 2 — Veri Modeli
{veritabani} kullanarak aşağıdaki tabloları/koleksiyonları yaz:
**`users` tablosu:**
- `id` (UUID, PK)
- `email` (unique, indexed)
- `hashed_password` (bcrypt, salt=12)
- `role` (enum: {roller})
- `is_active` (boolean, default true)
- `last_login_at` (timestamp, nullable)
- `created_at` / `updated_at`
**`refresh_tokens` tablosu:**
- `id` (UUID, PK)
- `token_hash` (SHA-256 hash, unique — ham token asla saklanmaz)
- `user_id` (FK → users.id)
- `device_id` (string, nullable — hangi cihaz/tarayıcı)
- `issued_at` / `expires_at` / `revoked_at` (timestamps)
---
## Adım 3 — Temel Auth Endpoint'leri (Çalışır Kod)
{backend_stack} dilinde şu beş endpoint'i yaz. Her biri için request body, başarı response ve hata response örneklerini de göster:
```
POST /auth/register → email + şifre kaydı; bcrypt hash; e-posta zaten varsa 409
POST /auth/login → kimlik doğrula; access token (Authorization header) + refresh token (HttpOnly Cookie) üret; refresh_tokens tablosuna kaydet
POST /auth/refresh → Cookie'deki refresh token'ı oku; doğrula; rotasyon: eskiyi revoke et, yeni çift üret
POST /auth/logout → refresh token'ı revoke et (revoked_at = now); Cookie'yi temizle
GET /auth/me → access token doğrula; kullanıcı profilini döndür
```
---
## Adım 4 — JWT Middleware ve RBAC Decorator
{backend_stack} dilinde şu iki bileşeni yaz:
1. **JWT Doğrulama Middleware** — her istekte `Authorization: Bearer <token>` header'ını kontrol et; token süresi dolmuşsa veya geçersizse 401 döndür; `request.user` nesnesini doldur.
2. **RBAC Decorator/Guard** — aşağıdaki şekilde kullanılabilir olsun:
- `@require_role("admin")` → yalnızca admin geçer
- `@require_role("admin", "editor")` → birden fazla rol geçer
- Yetkisiz rol → 403 Forbidden
3. **Kullanım Örneği:**
```
GET /api/dashboard → @require_role("admin", "editor")
DELETE /api/users/{id} → @require_role("admin")
GET /api/profile → giriş yapılmış herhangi rol (yalnızca auth middleware)
```
---
## Adım 5 — Güvenlik Kontrol Listesi
Her madde için durum (✅ Uygulandı / ⚠️ Eksik) ve kısa not içeren tablo oluştur:
| Güvenlik Önlemi | Durum | Not |
|-----------------|-------|-----|
| Şifre hash'leme (bcrypt, salt ≥ 10) | | |
| Brute-force koruması (rate limiting — login endpoint'i) | | |
| Refresh token revocation (veritabanında revoked_at) | | |
| HttpOnly + Secure + SameSite Cookie | | |
| CORS konfigürasyonu (izin verilen origin whitelist) | | |
| Input validation (e-posta formatı, şifre gücü) | | |
| Refresh token hash'leyerek saklama (SHA-256) | | |
| Hassas veri loglama önlemi (şifre/token log'a gitmez) | | |
| Token payload'da minimum veri (userId, role, exp) | | |
| HTTPS zorunluluğu (prod ortamı) | | |
---
## Adım 6 — Test Senaryoları (curl Komutları)
Aşağıdaki altı senaryoyu tam curl komutlarıyla göster:
1. Başarılı kayıt
2. Başarılı giriş + token alma
3. Korumalı endpoint'e geçerli access token ile istek
4. Süresi dolmuş access token ile istek → 401
5. Refresh endpoint ile token yenileme
6. Logout sonrası refresh → 401 (revoked token)
---
## Kısıtlar
- Üçüncü taraf auth servisi (Auth0, Firebase, Supabase Auth) KULLANMA — sıfırdan yaz
- Şifreler ve ham refresh token'lar ASLA veritabanına plain-text yazılmasın
- Kod üretim ortamına hazır olsun; yorum satırları İngilizce, açıklamalar Türkçe
- Access token payload'a yalnızca `sub` (userId), `role`, `iat`, `exp` ekle; hassas veri koyma
- Refresh token rotasyonu zorunlu: eski token kullanıldığında anında iptal et (token reuse detection)Bu ne işe yarar?
JWT access/refresh token, rol tabanlı yetkilendirme (RBAC) ve güvenlik kontrol listesiyle production-ready auth sistemi kodu üretin.