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.json
desteğ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 veya runtime üretimi)
- 🛡️ 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
- Vault
- Graylog
- 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
.env
dosyası oluşturun ve aşağıdaki bilgileri ekleyin:MYSQL_ROOT_PASSWORD=your_mysql_password DB_USERNAME=root DB_PASSWORD=your_mysql_password SECRET_KEY=your_jwt_secret_key EXPIRATION_TIME_MS=3600000 REFRESH_EXPIRATION_TIME_MS=86400000 REDIS_HOST=localhost REDIS_PORT=6379 REDIS_PASSWORD=your_redis_password VAULT_URI=http://localhost:8200 VAULT_TOKEN=my-root-token GRAYLOG_HOST=localhost GRAYLOG_PORT=12201 GRAYLOG_PASSWORD_SECRET=your_graylog_password_secret GRAYLOG_ROOT_PASSWORD_SHA2=your_graylog_root_password_sha2
-
RSA Key Dosyalarını Yapılandırın (İsteğe Bağlı):
# Özel bir RSA key çifti kullanmak istiyorsanız mkdir -p src/main/resources/keys # Private key oluşturma (PKCS#8 formatında) openssl genpkey -algorithm RSA -out src/main/resources/keys/private.pem -pkeyopt rsa_keygen_bits:2048 # Public key oluşturma openssl rsa -pubout -in src/main/resources/keys/private.pem -out src/main/resources/keys/public.pem
Not: Key dosyaları sağlanmazsa, uygulama otomatik olarak runtime'da RSA key çifti oluşturacaktır.
-
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.
- 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": "john.doe@example.com",
"password": "password123"
}'
curl -X POST http://localhost:8080/api/auth/login \
-H "Content-Type: application/json" \
-d '{
"email": "john.doe@example.com",
"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.json
Bu 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.json
Diğ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-service
olduğunu kontrol edin - Token'daki
aud
(audience) claim'ininauth-service-clients
olduğ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!