# 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ı ```text /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:** ```json { "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.