76 lines
3.4 KiB
Markdown
76 lines
3.4 KiB
Markdown
# 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. |