Auth Service, modern mikroservis mimarileri için güvenli kimlik doğrulama ve yetkilendirme hizmeti sunan, Spring Boot 3 ile geliştirilmiş, Common JPA, Auditing, Graylog merkezi loglama ve soft-delete destekli bir servistir. RS256 RSA imzalı JWT tabanlı oturum yönetimi, kullanıcı yetkilendirme, JWK (JSON Web Key) desteği ve güvenlik mekanizmalarını kapsayan bu servis, mikroservis mimarilerine kolayca entegre edilebilir.
- 🔐 RS256 RSA algoritması ile imzalanmış JWT tabanlı kimlik doğrulama
- 🔑 JWK (JSON Web Key) endpoint'leri - RFC 7517 standardına uygun
- 🌐 Mikroservis entegrasyonu için
.well-known/jwks.jsondesteği - 👥 Üyelik bazlı rol sistemi (FREE, PREMIUM, GUEST, ADMIN, MODERATOR)
- 🔄 Token yenileme ve kara listeye alma (Redis destekli)
- 🔒 RSA key çifti yönetimi (Vault entegrasyonu ile otomatik üretim)
- 🛡️ Spring Security ile entegre kimlik ve yetkilendirme yönetimi
- 📜 Common JPA Package entegrasyonu
- 🛠 Auditing ile kimlik doğrulama logları tutulur
- 📊 Graylog + Elasticsearch + MongoDB tabanlı merkezi loglama sistemi
- 🔒 HashiCorp Vault ile güvenli konfigürasyon yönetimi
- 📝 Swagger/OpenAPI dokümantasyonu
- 💪 Docker desteği
- 🛃️ MySQL veritabanı entegrasyonu
- ❌ Soft-delete mekanizması ile silinmeyen veri yönetimi
- ✅ Merkezi hata yönetimi
- 📧 Email tabanlı giriş sistemi
- 👤 Ad-Soyad validasyonu ve normalizasyonu
Servis, üyelik bazlı rol sistemi kullanır:
- ROLE_FREE: Ücretsiz üyelik
- ROLE_PREMIUM: Premium üyelik
- ROLE_GUEST: Misafir kullanıcı
- ROLE_ADMIN: Yönetici
- ROLE_MODERATOR: Moderatör (kritik endpointlerde readonly yetkili)
- Java 21+
- Docker & Docker Compose
- Maven 3.6+
- MySQL 8.0+
- Redis
- HashiCorp Vault
- Graylog
- OpenSSL (RSA key üretimi için)
- Common JPA Package
-
Projeyi klonlayın:
git clone https://github.com/kalayciburak/auth-service.git cd auth-service -
Ortam değişkenlerini ayarlayın: Kök dizinde
.envdosyası oluşturun ve aşağıdaki bilgileri ekleyin:# Vault Configuration VAULT_URI=http://localhost:8200 VAULT_TOKEN=my-root-token # Database DB_USERNAME=liflow_user DB_PASSWORD=secure_db_pass DB_URL=jdbc:mysql://localhost:3306/liflow_db # Redis REDIS_HOST=localhost REDIS_PORT=6379 REDIS_PASSWORD=secure_redis_pass # Mail MAIL_HOST=smtp.gmail.com MAIL_PORT=587 MAIL_USERNAME[email protected] MAIL_PASSWORD=your-app-password # JWT JWT_EXPIRATION_MS=3600000 JWT_REFRESH_EXPIRATION_MS=86400000 # Graylog GRAYLOG_HOST=localhost GRAYLOG_PORT=12201 GRAYLOG_PASSWORD_SECRET=your-graylog-secret GRAYLOG_ROOT_PASSWORD_SHA2=your-graylog-root-password-sha2 # Application FRONTEND_URL=http://localhost:3000
-
Vault secret'larını yapılandırın:
# RSA key çifti otomatik olarak üretilir ve Vault'a yazılır ./scripts/setup-vault-secrets.shNot: Bu script
.envdosyasındaki tüm konfigürasyonları Vault'a yazar, RSA key çiftini otomatik üretir ve güvenlik için yerel diskten siler. -
Docker kullanarak servisleri başlatın:
docker-compose up -d
-
Uygulamayı derleyin:
./mvnw clean install
-
Uygulamayı çalıştırın:
./mvnw spring-boot:run
📌 Servis çalıştığında: http://localhost:8080 adresinde kullanıma hazır olacaktır.
💡 Detaylı script bilgileri için:
scripts/README.mddosyasına bakabilirsiniz.
- POST
/api/auth/register- Yeni kullanıcı kaydı (ad, soyad, email, şifre) - POST
/api/auth/login- Kullanıcı girişi ve JWT token alma (email, şifre) - POST
/api/auth/refresh- Token yenileme - POST
/api/auth/logout- Kullanıcı çıkışı ve token kara listeye alma
- GET
/.well-known/jwks.json- JWT token doğrulaması için public key bilgileri (JWK formatında)
- GET
/api/user- Tüm kullanıcıları listele (ADMIN yetkisi gerekli) - PUT
/api/user/{id}/roles- Kullanıcı rollerini güncelle (ADMIN yetkisi gerekli) - PUT
/api/user/{id}/change-password- Kullanıcı parolasını değiştir - DELETE
/api/user/{id}- Kullanıcı sil (ADMIN yetkisi gerekli)
🛠 API dokümantasyonu:
- Swagger UI:
http://localhost:8080/swagger-ui.html - OpenAPI JSON:
http://localhost:8080/v3/api-docs
curl -X POST http://localhost:8080/api/auth/register \
-H "Content-Type: application/json" \
-d '{
"firstName": "John",
"lastName": "Doe",
"email": "[email protected]",
"password": "password123"
}'curl -X POST http://localhost:8080/api/auth/login \
-H "Content-Type: application/json" \
-d '{
"email": "[email protected]",
"password": "password123"
}'curl -X POST http://localhost:8080/api/auth/logout \
-H "Authorization: Bearer <your_jwt_token>"curl -X GET http://localhost:8080/.well-known/jwks.jsonBu auth-service diğer mikroservislerin JWT token'larını doğrulaması için JWK endpoint'i sunar:
# Diğer mikroservisler bu endpoint'i kullanarak public key bilgilerini alabilir
GET http://auth-service:8080/.well-known/jwks.jsonDiğer mikroservislerde JWT token'larını doğrulamak için:
- JWK endpoint'ini kullanarak public key bilgilerini alın
- RS256 algoritması ile token signature'ını doğrulayın
- Token'daki
iss(issuer) claim'ininauth-serviceolduğunu kontrol edin - Token'daki
aud(audience) claim'ininauth-service-clientsolduğunu kontrol edin
- RS256 RSA İmza: Asymmetric key pair ile güvenli token imzalama
- Parola İhlal Kontrolü: HaveIBeenPwned API ile parola güvenlik kontrolü
- Token Kara Liste: Redis ile token geçersizleştirme
- Soft Delete: Kullanıcı verilerinin güvenli silinmesi
- Role-Based Access Control: Detaylı yetkilendirme sistemi
- Ad-Soyad Normalizasyonu: İsimler otomatik olarak baş harfleri büyük olacak şekilde normalize edilir
Projeye katkı sağlamak için:
- Projeyi fork edin
- Yeni bir branch oluşturun (
git checkout -b feature/yeni-ozellik) - Değişiklikleri commit edin (
git commit -m 'Yeni özellik eklendi') - Branch'inizi push edin (
git push origin feature/yeni-ozellik) - Bir Pull Request oluşturun
🛠 PR'nızın aşağıdaki şartlara uygun olmasına dikkat edin:
- Kod stiline uygunluk
- Dokümantasyon eklenmesi
- Yeterli test kapsamı
Bu proje MIT Lisansı ile lisanslanmıştır. Detaylar için LICENSE dosyasına bakabilirsiniz.
Sorularınız ve geri bildirimleriniz için GitHub'da bir issue oluşturabilirsiniz.
💙 Modern kimlik doğrulama sisteminizi güvenli hale getirin!