Spring Boot mikroservisi ile JWT kimlik doğrulama, Keycloak entegrasyonu, OpenFGA yetkilendirme ve cihaz takibi.
Bu mikroservis, Java 17 ve Spring Boot kullanılarak geliştirilmiş olup, JWT tabanlı kimlik doğrulama, Keycloak entegrasyonu, OpenFGA ile ince taneli yetkilendirme ve cihaz MAC ID takibi özelliklerine sahiptir. Servis, Eureka üzerinden kayıt olur ve API Gateway üzerinden istekleri alır.
- Java 17
- Spring Boot 3.1.5
- Spring Security
- Spring Cloud (Eureka Client)
- Keycloak 22.0.1
- OpenFGA
- PostgreSQL
- Gradle
- JUnit 5 & Testcontainers
- Swagger/OpenAPI
- JWT tabanlı kimlik doğrulama
- Harici Keycloak entegrasyonu
- OpenFGA ile ince taneli yetkilendirme (endpoint bazında ve veri filtreleme)
- Cihaz yönetimi (MAC ID takibi, cihaz engelleme)
- Eureka servis kaydı
- API Gateway entegrasyonu
- PostgreSQL veritabanı entegrasyonu
- Kapsamlı birim ve entegrasyon testleri
- Swagger/OpenAPI dokümantasyonu
- Java 17 veya üzeri
- PostgreSQL
- Keycloak sunucusu
- OpenFGA sunucusu
- Eureka sunucusu
- API Gateway
PostgreSQL veritabanını oluşturun:
CREATE DATABASE auth_service_db;
CREATE USER auth_service WITH PASSWORD 'your_password';
GRANT ALL PRIVILEGES ON DATABASE auth_service_db TO auth_service;application.yml dosyasını kendi ortamınıza göre düzenleyin:
spring:
datasource:
url: jdbc:postgresql://localhost:5432/auth_service_db
username: auth_service
password: your_password
security:
oauth2:
resourceserver:
jwt:
issuer-uri: http://your-keycloak-server/auth/realms/your-realm
keycloak:
auth-server-url: http://your-keycloak-server/auth
realm: your-realm
resource: your-client-id
openfga:
api-url: http://your-openfga-server
store-id: your-store-id
eureka:
client:
service-url:
defaultZone: http://your-eureka-server/eureka/./gradlew clean build
java -jar build/libs/auth-service-0.0.1-SNAPSHOT.jarPOST /api/auth/register: Yeni kullanıcı kaydıPOST /api/auth/device: Cihaz kaydıPOST /api/auth/device/{deviceId}/block: Cihaz engellemePOST /api/auth/device/{deviceId}/unblock: Cihaz engeli kaldırmaPOST /api/auth/logout: Çıkış yapma ve token'ı geçersiz kılma
GET /api/devices/user/{userId}: Kullanıcının cihazlarını getirmePOST /api/devices: Cihaz kaydıPOST /api/devices/{deviceId}/block: Cihaz engellemePOST /api/devices/{deviceId}/unblock: Cihaz engeli kaldırmaGET /api/devices/search: MAC adresi ile cihaz arama
POST /api/authorization/check: Yetkilendirme kontrolüPOST /api/authorization/grant: Yetki vermePOST /api/authorization/revoke: Yetki kaldırmaGET /api/authorization/user/{userId}: Kullanıcı yetkilerini getirmeGET /api/authorization/object: Nesne yetkilerini getirme
Servis, JWT token tabanlı kimlik doğrulama kullanır. Tüm API istekleri (kimlik doğrulama ve Swagger dokümantasyonu hariç) için geçerli bir JWT token gereklidir. Token, Authorization header'ında Bearer {token} formatında gönderilmelidir.
Cihaz MAC adresi, X-MAC-Address header'ında gönderilmelidir.
Servis, kapsamlı birim ve entegrasyon testleri içerir. Testleri çalıştırmak için:
./gradlew testAPI dokümantasyonu, Swagger UI aracılığıyla erişilebilir:
http://localhost:8081/auth-service/swagger-ui.html
Bu proje Apache License 2.0 altında lisanslanmıştır.