229 lines
6.3 KiB
Markdown
229 lines
6.3 KiB
Markdown
# GAuth-Central - Centralized Authentication Service
|
||
|
||
Modern, ölçeklenebilir ve güvenli bir kimlik doğrulama servisi. PostgreSQL ve Redis ile desteklenir.
|
||
|
||
## 🚀 Özellikler
|
||
|
||
- ✅ JWT tabanlı kimlik doğrulama
|
||
- ✅ OAuth2 entegrasyonu (Google, GitHub)
|
||
- ✅ Email doğrulama
|
||
- ✅ Redis ile session yönetimi ve caching
|
||
- ✅ PostgreSQL ile veri saklama
|
||
- ✅ Rate limiting
|
||
- ✅ Token blacklist (logout)
|
||
- ✅ CORS desteği
|
||
- ✅ Swagger/OpenAPI dokümantasyonu
|
||
- ✅ Docker & Docker Compose desteği
|
||
|
||
## 📋 Gereksinimler
|
||
|
||
- Go 1.25+
|
||
- PostgreSQL 17+
|
||
- Redis 7+
|
||
- Docker & Docker Compose (opsiyonel)
|
||
|
||
## 🛠️ Kurulum
|
||
|
||
### 1. Repository'yi klonlayın
|
||
|
||
```bash
|
||
git clone <repository-url>
|
||
cd atahango
|
||
```
|
||
|
||
### 2. Environment dosyasını ayarlayın
|
||
|
||
```bash
|
||
cp .env.example .env
|
||
# .env dosyasını kendi ayarlarınıza göre düzenleyin
|
||
```
|
||
|
||
### 3. Bağımlılıkları yükleyin
|
||
|
||
```bash
|
||
go mod download
|
||
```
|
||
|
||
### 4a. Standalone Mode (Mevcut PostgreSQL & Redis kullanarak)
|
||
|
||
Eğer zaten çalışan PostgreSQL ve Redis sunucularınız varsa:
|
||
|
||
```bash
|
||
# .env dosyasında DB_URL ve REDIS_URL'i ayarlayın
|
||
# Örnek:
|
||
# DB_URL="host=10.80.80.70 user=cloud password=xxx dbname=go_gauth port=5432 sslmode=disable"
|
||
# REDIS_URL=redis://default:xxx@10.80.80.70:6379/0
|
||
|
||
# Uygulamayı başlat
|
||
./start.sh
|
||
|
||
# veya manuel
|
||
go run main.go
|
||
```
|
||
|
||
### 4b. Docker ile çalıştırma
|
||
|
||
```bash
|
||
# Tüm servisleri başlat (PostgreSQL, Redis, App)
|
||
docker-compose up -d
|
||
|
||
# Logları takip et
|
||
docker-compose logs -f app
|
||
```
|
||
|
||
### 4b. Docker ile çalıştırma
|
||
|
||
Docker ile tüm servisleri (PostgreSQL, Redis, App) birlikte başlatmak için:
|
||
|
||
```bash
|
||
# Tüm servisleri başlat (PostgreSQL, Redis, App)
|
||
docker-compose up -d
|
||
|
||
# Logları takip et
|
||
docker-compose logs -f app
|
||
```
|
||
|
||
### 5. Bağlantı Testi
|
||
|
||
```bash
|
||
# API sağlık kontrolü
|
||
curl http://localhost:8080/
|
||
|
||
# Swagger dokümantasyonu
|
||
open http://localhost:8080/docs/index.html
|
||
```
|
||
|
||
## 🔧 Yapılandırma
|
||
|
||
### Environment Variables
|
||
|
||
| Değişken | Açıklama | Örnek |
|
||
|----------------------|------------------------------|-----------------------------------------------------------------------------------|
|
||
| `PORT` | Uygulama portu | `8080` |
|
||
| `DB_URL` | PostgreSQL bağlantı string'i | `host=localhost user=postgres password=pass dbname=gauth port=5432 sslmode=disable` |
|
||
| `REDIS_URL` | Redis bağlantı URL'i | `redis://default:password@localhost:6379/0` |
|
||
| `JWT_SECRET` | JWT için gizli anahtar | `your_secret_key` |
|
||
| `GOOGLE_CLIENT_ID` | Google OAuth Client ID | \- |
|
||
| `GOOGLE_CLIENT_SECRET` | Google OAuth Client Secret | \- |
|
||
| `GITHUB_CLIENT_ID` | GitHub OAuth Client ID | \- |
|
||
| `GITHUB_CLIENT_SECRET` | GitHub OAuth Client Secret | \- |
|
||
| `CLIENT_CALLBACK_URL` | OAuth callback URL | `http://localhost:8080/v1/auth` |
|
||
|
||
## 📚 API Dokümantasyonu
|
||
|
||
Swagger UI: `http://localhost:8080/docs/index.html`
|
||
|
||
### Temel Endpoint'ler
|
||
|
||
#### Authentication
|
||
|
||
- `POST /v1/auth/register` - Yeni kullanıcı kaydı
|
||
- `POST /v1/auth/login` - Kullanıcı girişi
|
||
- `GET /v1/auth/verify-email` - Email doğrulama
|
||
- `POST /v1/auth/refresh` - Token yenileme
|
||
- `GET /v1/auth/:provider` - OAuth ile giriş (google, github)
|
||
- `GET /v1/auth/:provider/callback` - OAuth callback
|
||
|
||
#### Protected Routes (Authorization gerekli)
|
||
|
||
- `GET /v1/auth/me` - Kullanıcı bilgilerini getir
|
||
- `GET /v1/auth/validate` - Token doğrulama
|
||
|
||
## 🗄️ Veritabanı Yapısı
|
||
|
||
### PostgreSQL Tables
|
||
|
||
- `users` - Kullanıcı bilgileri
|
||
- `social_accounts` - OAuth hesap bağlantıları
|
||
- `roles` - Kullanıcı rolleri
|
||
- `permissions` - İzinler
|
||
|
||
### Redis Cache Keys
|
||
|
||
- `user:{id}` - Kullanıcı cache
|
||
- `session:{token}` - Session yönetimi
|
||
- `blacklist:{token}` - Token blacklist
|
||
- `ratelimit:{key}` - Rate limiting
|
||
- `email_verify:{email}` - Email doğrulama token'ları
|
||
- `password_reset:{email}` - Şifre sıfırlama token'ları
|
||
|
||
## 🔒 Güvenlik
|
||
|
||
- Şifreler bcrypt ile hashlenmiş olarak saklanır
|
||
- JWT token'lar Authorization header'da Bearer token olarak gönderilir
|
||
- CORS politikaları yapılandırılmıştır
|
||
- Rate limiting Redis ile yönetilir
|
||
- Logout sonrası token'lar blacklist'e eklenir
|
||
|
||
## 🐳 Docker Compose
|
||
|
||
Uygulama 3 servis ile çalışır:
|
||
|
||
1. **PostgreSQL** - Ana veritabanı (Port: 5432)
|
||
2. **Redis** - Cache ve session store (Port: 6379)
|
||
3. **App** - Go backend (Port: 8080)
|
||
|
||
```bash
|
||
# Servisleri başlat
|
||
docker-compose up -d
|
||
|
||
# Servisleri durdur
|
||
docker-compose down
|
||
|
||
# Volume'ları da sil
|
||
docker-compose down -v
|
||
```
|
||
|
||
## 🧪 Development
|
||
|
||
### Swagger Docs Güncelleme
|
||
|
||
```bash
|
||
# Swagger dokümantasyonunu güncelle
|
||
swag init -g main.go
|
||
```
|
||
|
||
### Database Migration
|
||
|
||
Uygulama ilk çalıştırıldığında otomatik olarak migration yapar ve seed data'yı ekler.
|
||
|
||
## 📝 Cache Service Kullanımı
|
||
|
||
```go
|
||
cacheService := services.NewCacheService()
|
||
|
||
// Kullanıcı cache
|
||
cacheService.SetUser(userID, user, 1*time.Hour)
|
||
user, err := cacheService.GetUser(userID)
|
||
|
||
// Session
|
||
cacheService.SetSession(token, userID, 24*time.Hour)
|
||
userID, err := cacheService.GetSession(token)
|
||
|
||
// Rate limiting
|
||
count, err := cacheService.IncrementRateLimit("login:"+ip, 1*time.Minute)
|
||
|
||
// Token blacklist
|
||
cacheService.BlacklistToken(token, 24*time.Hour)
|
||
isBlacklisted, err := cacheService.IsTokenBlacklisted(token)
|
||
```
|
||
|
||
## 🤝 Contributing
|
||
|
||
1. Fork the project
|
||
2. Create your feature branch (`git checkout -b feature/AmazingFeature`)
|
||
3. Commit your changes (`git commit -m 'Add some AmazingFeature'`)
|
||
4. Push to the branch (`git push origin feature/AmazingFeature`)
|
||
5. Open a Pull Request
|
||
|
||
## 📄 License
|
||
|
||
This project is licensed under the MIT License.
|
||
|
||
## 👨💻 Author
|
||
|
||
GAuth-Central Team
|
||
|
||
---
|
||
|
||
⭐ Bu projeyi beğendiyseniz yıldız vermeyi unutmayın! |