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

229 lines
6.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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!