Files
AuthCentral/GEMINI.md
Beyhan Oğur 8b1fbdee99 first commit
2026-04-26 21:37:58 +03:00

3.4 KiB
Raw Permalink Blame History

Proje: GAuth-Central (Go-Gin Merkezi Kimlik Doğrulama Servisi)

1. Proje Özeti

Bu proje, birden fazla istemci uygulama (özellikle Django backend) için merkezi bir kimlik doğrulama ve yetkilendirme (Identity Provider) hizmeti sunar. Go (Gin Framework) ile geliştirilecek olan bu servis; klasik e-posta kaydı, Google ve GitHub OAuth2 girişlerini yönetir ve başarılı giriş sonrası JWT (JSON Web Token) üretir.

2. Teknoloji Yığını

  • Dil: Go (Golang)
  • Web Framework: Gin Gonic
  • Veritabanı: PostgreSQL (GORM üzerinden)
  • Kimlik Doğrulama:
    • JWT (github.com/golang-jwt/jwt/v5)
    • OAuth2 (golang.org/x/oauth2 ve github.com/markbates/goth)
  • Güvenlik: Bcrypt (şifre hashleme), CORS, Rate Limiting.

3. Klasör Yapısı

/gauth-central
├── /api
│   ├── /handlers      # HTTP istek işleyicileri
│   ├── /middlewares   # JWT ve Auth kontrolleri
│   └── /routes        # Route tanımları
├── /config            # Env ve Konfigürasyon yönetimi
├── /internal
│   ├── /models        # DB Modelleri (User, SocialAccount)
│   ├── /services      # Auth ve JWT iş mantığı
│   └── /database      # DB Bağlantısı ve Migration
├── /pkg               # Yardımcı araçlar (utils)
├── .env               # Gizli anahtarlar
├── go.mod
└── main.go

4. Veritabanı Modeli (GORM)

  • User: ID, Email, Password (hash), CreatedAt, UpdatedAt.
  • SocialAccount: ID, UserID (FK), Provider (google/github), ProviderID, Email.

5. API Uç Noktaları (Endpoints)

Klasik Auth

  • POST /v1/auth/register: E-posta ve şifre ile kayıt.
  • POST /v1/auth/login: E-posta ve şifre ile giriş -> JWT döner.

OAuth2 (Social Login)

  • GET /v1/auth/:provider: (google/github) Kullanıcıyı ilgili platforma yönlendirir.
  • GET /v1/auth/:provider/callback: Platformdan dönen veriyi işler, kullanıcıyı DB'de eşleştirir/oluşturur -> JWT döner.

Doğrulama ve Yönetim

  • GET /v1/auth/validate: İstemci uygulama (Django) bu endpoint'e JWT gönderir, servis kullanıcı bilgilerini doğrular.
  • POST /v1/auth/refresh: Refresh token ile yeni Access Token üretimi.

6. JWT Tasarımı

  • Payload:
    {
      "sub": "user_uuid",
      "email": "user@example.com",
      "exp": 1738500000,
      "iss": "gauth-central"
    }
    
  • İmzalama: HS256 veya RS256 algoritması kullanılmalıdır.

7. İstemci Entegrasyon Mantığı (Örn: Django)

  1. Django, kullanıcıyı GAuth/v1/auth/google adresine yönlendirir.
  2. GAuth işlemi tamamlar ve kullanıcıyı Django'nun callback URL'ine bir ?token=... query parametresi ile geri gönderir.
  3. Django, bu token'ı alır ve kendi session'ını oluşturmak için GAuth'un /v1/auth/validate servisini kullanır.

8. Gemini İçin Talimatlar (Implementation Rules)

  • Kodları modüler yaz (Handlers, Services, Models ayrımı).
  • .env dosyasından CLIENT_ID, CLIENT_SECRET ve JWT_SECRET okumayı unutma.
  • Hata yönetimini (Error Handling) profesyonelce yap ve JSON formatında hata mesajları dön.
  • CORS ayarlarını tüm istemciler (Django vb.) için yapılandırılabilir kıl.
  • github.com/markbates/goth kütüphanesini kullanarak multi-provider desteğini uygula.

Not: Bu dosya projenin teknik rehberidir. Kod üretim aşamasında bu mimariye sadık kalınmalıdır.