Skip to content

Démonstration de l'utilisation de microservices avec Spring Boot et Keycloak pour la gestion de l'authentification OAuth2.

Notifications You must be signed in to change notification settings

ELMOUADDIBE/microservices-spring-keycloak-oauth2

Repository files navigation

Demo de Microservices avec Spring Boot et Keycloak OAuth2

Ce projet est une démonstration de l'utilisation de microservices avec Spring Boot et Keycloak pour la gestion de l'authentification OAuth2.


Architecture du Projet

.
|- discover-service
|- gateway-service
|- config-server
|- inventory-service
|- order-service
|- frontend-angular

Installation de Keycloak avec Docker

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.

Configuration Spring Boot

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

Services

Gateway Service

Dépendances

<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.

Discovery Service

Dépendances

<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.

Config Service

Dépendances

<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.


Frontend Angular

Installez Keycloak Angular :

npm install keycloak-angular keycloak-js

Interfaces Utilisateurs

  1. Login

Interface de connexion

  1. Produits

Interface des produits

  1. Commandes

Interface des commandes


Tests avec Keycloak

Swagger pour tester les APIs

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

Test avec Postman

Token avec password

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

Postman Token Password Grant

Token avec client_credentials

Activez l'authentification du client dans Keycloak et testez :

Postman Token Client Credentials Grant


Instances et Résultats

Instances

  1. Eureka Server : http://localhost:8761 Eureka Instances

  2. Frontend : http://localhost:4200


Appels d'API

Appel pour l’authentification :

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>

Appel à l'API de produits :

GET http://localhost:8888/INVENTORY-SERVICE/api/products
Authorization: Bearer <access-token>

Appel à l'API de commandes :

GET http://localhost:8888/ORDER-SERVICE/api/orders
Authorization: Bearer <access-token>

gateway_product_api.png

About

Démonstration de l'utilisation de microservices avec Spring Boot et Keycloak pour la gestion de l'authentification OAuth2.

Topics

Resources

Stars

Watchers

Forks