first commit
This commit is contained in:
229
README.md
Normal file
229
README.md
Normal file
@@ -0,0 +1,229 @@
|
||||
# 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 AuthCentral
|
||||
```
|
||||
|
||||
### 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!
|
||||
Reference in New Issue
Block a user