yapayzekapromptu
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.

İlgili Promptlar