Ce projet est une démonstration de l'utilisation de microservices avec Spring Boot et Keycloak pour la gestion de l'authentification OAuth2.
.
|- discover-service
|- gateway-service
|- config-server
|- inventory-service
|- order-service
|- frontend-angular
Pour simplifier l'installation, Keycloak sera déployé avec Docker.
# Télécharger l'image Keycloak
docker pull quay.io/keycloak/keycloak
# Lancer Keycloak
docker run --name mykeycloak -p 8080:8080 -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=admin quay.io/keycloak/keycloak:latest start-dev
- Pour plus de détails sur la configuration de Keycloak, consultez ce dépôt GitHub.
Ajoutez cette dépendance pour activer l'utilisation d'OAuth2 :
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-resource-server</artifactId>
</dependency>
Dans application.properties
, configurez Keycloak :
spring.security.oauth2.resourceserver.jwt.issuer-uri=http://localhost:8080/realms/ecom-realm
spring.security.oauth2.resourceserver.jwt.jwk-set-uri=http://localhost:8080/realms/ecom-realm/protocol/openid-connect/certs
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
Ajoutez @EnableDiscoveryClient
dans la classe principale.
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
Ajoutez les propriétés suivantes dans application.properties
:
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
Ajoutez @EnableEurekaServer
dans la classe principale.
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
Ajoutez @EnableConfigServer
et @EnableDiscoveryClient
dans la classe principale.
Installez Keycloak Angular :
npm install keycloak-angular keycloak-js
- Login
- Produits
- Commandes
Ajoutez cette dépendance dans votre projet Spring Boot :
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>2.7.0</version>
</dependency>
Accédez à Swagger : http://localhost:8081/swagger-ui/index.html
POST http://localhost:8080/realms/ecom-realm/protocol/openid-connect/token
Content-Type: application/x-www-form-urlencoded
grant_type=password&client_id=angular-client&username=zaid&password=admin
Activez l'authentification du client dans Keycloak et testez :
-
Eureka Server : http://localhost:8761
-
Frontend : http://localhost:4200
POST http://localhost:8080/realms/ecom-realm/protocol/openid-connect/token
Content-Type: application/x-www-form-urlencoded
grant_type=password&client_id=angular-client&username=zaid&password=admin
GET http://localhost:8081/api/auth
Authorization: Bearer <access-token>
GET http://localhost:8888/INVENTORY-SERVICE/api/products
Authorization: Bearer <access-token>
GET http://localhost:8888/ORDER-SERVICE/api/orders
Authorization: Bearer <access-token>