Single Sign-On (SSO) est devenue une fonctionnalité essentielle des applications Web modernes, améliorant à la fois l'expérience utilisateur et la sécurité. Ce guide complet vous guidera dans la mise en œuvre de l'authentification unique à l'aide de Keycloak et Spring Boot, fournissant ainsi une solution d'authentification et d'autorisation robuste pour vos applications.
L'authentification unique (SSO) est essentielle pour rationaliser les processus d'authentification, renforcer la sécurité et améliorer l'expérience utilisateur. Voici quelques-uns des principaux avantages :
Authentification centralisée : SSO permet aux utilisateurs de s'authentifier une fois et d'accéder à plusieurs applications. Keycloak offre une gestion centralisée des identités des utilisateurs, ce qui est utile dans les environnements comportant de nombreuses applications.
Sécurité améliorée : grâce à la gestion centralisée des identités, les politiques de sécurité (telles que la force des mots de passe, l'authentification à deux facteurs et les politiques de verrouillage des comptes) peuvent être appliquées de manière uniforme. La prise en charge par Keycloak de protocoles tels qu'OpenID Connect et OAuth 2.0 garantit des normes de sécurité robustes et modernes.
Réduction de la fatigue liée aux mots de passe et expérience utilisateur améliorée : en se connectant une seule fois, les utilisateurs évitent la fatigue liée aux mots de passe et aux informations d'identification multiples, ce qui conduit à des interactions plus fluides et plus rapides entre les applications.
Évolutivité et flexibilité : la configuration de Keycloak peut prendre en charge un grand nombre d'utilisateurs et plusieurs fournisseurs d'identité, y compris les connexions sociales (Google, Facebook, etc.) et les annuaires d'entreprise (LDAP, Active Directory).
Personnalisation et extensibilité : Keycloak permet des thèmes, des flux de connexion et des extensions personnalisés, le rendant adaptable à divers besoins. Il est également open source, offrant aux organisations la possibilité de modifier ou d'étendre la plateforme selon leurs besoins.
Alternatives à l'authentification unique (SSO) :
Authentification multiple/authentification traditionnelle :
Identité fédérée :
Authentification multifacteur (MFA) :
Avant de plonger dans la mise en œuvre, comprenons le flux SSO :
Créez un nouveau projet Spring Boot avec la structure suivante :
keycloak-demo/ ├── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── bansikah/ │ │ │ └── keycloakdemo/ │ │ │ ├── config/ │ │ │ │ └── SecurityConfig.java │ │ │ ├── controller/ │ │ │ │ └── FoodOrderingController.java │ │ │ └── KeycloakDemoApplication.java │ │ └── resources/ │ │ ├── templates/ │ │ │ ├── home.html │ │ │ └── menu.html │ │ └── application.yml ├── docker-compose.yml └── pom.xml
Remarque :
bansikah c'est mon nom ? afin que vous puissiez mettre le vôtre ou exemple tout ce que vous voulez...
Ajoutez les dépendances suivantes à votre pom.xml ou vous pouvez simplement remplacer la section des dépendances pour éviter les conflits :
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-oauth2-client</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-oauth2-resource-server</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!-- https://mvnrepository.com/artifact/org.thymeleaf.extras/thymeleaf-extras-springsecurity3 --> <dependency> <groupId>org.thymeleaf.extras</groupId> <artifactId>thymeleaf-extras-springsecurity3</artifactId> <version>3.0.5.RELEASE</version> </dependency> </dependencies>
Créez un fichier docker-compose.yml dans le répertoire racine :
version: '3' services: keycloak: image: quay.io/keycloak/keycloak:latest environment: KEYCLOAK_ADMIN: admin KEYCLOAK_ADMIN_PASSWORD: admin ports: - "8088:8080" command: - start-dev app: build: . ports: - "8082:8082" depends_on: - keycloak
Exécutez le serveur Keycloak avec :
docker-compose up -d
Accédez à la console d'administration Keycloak :
Créez un nouveau royaume :
Créer un nouveau client :
Sur le premier écran :
Sur l'écran suivant (Configuration des capacités) :
http://localhost:8082/ http://localhost:8082/menu http://localhost:8082/login/oauth2/code/keycloak
et définissez le mot de passe :
Créez application.yml dans src/main/resources :
keycloak-demo/ ├── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── bansikah/ │ │ │ └── keycloakdemo/ │ │ │ ├── config/ │ │ │ │ └── SecurityConfig.java │ │ │ ├── controller/ │ │ │ │ └── FoodOrderingController.java │ │ │ └── KeycloakDemoApplication.java │ │ └── resources/ │ │ ├── templates/ │ │ │ ├── home.html │ │ │ └── menu.html │ │ └── application.yml ├── docker-compose.yml └── pom.xml
Remplacez
Remarque :
En production ou comme bonne pratique il sera bon de conserver les informations délicates en tant que telles dans un fichier .env à la racine de votre projet et de l'utiliser comme variable dans votre configuration ce sera quelque chose comme ${CLIENT_SECRET} qui le sélectionne dans le fichier .env lorsque vous démarrez votre application, cela s'applique également à la redirection, à l'émetteur-uri et au reste..
Créez SecurityConfig.java dans src/main/java/com/bansikah/keycloakdemo/config :
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-oauth2-client</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-oauth2-resource-server</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!-- https://mvnrepository.com/artifact/org.thymeleaf.extras/thymeleaf-extras-springsecurity3 --> <dependency> <groupId>org.thymeleaf.extras</groupId> <artifactId>thymeleaf-extras-springsecurity3</artifactId> <version>3.0.5.RELEASE</version> </dependency> </dependencies>
Créez FoodOrderingController.java dans src/main/java/com/bansikah/keycloakdemo/controller :
version: '3' services: keycloak: image: quay.io/keycloak/keycloak:latest environment: KEYCLOAK_ADMIN: admin KEYCLOAK_ADMIN_PASSWORD: admin ports: - "8088:8080" command: - start-dev app: build: . ports: - "8082:8082" depends_on: - keycloak
Créez home.html dans src/main/resources/templates :
docker-compose up -d
Créez menu.html dans src/main/resources/templates :
http://localhost:8082/ http://localhost:8082/menu http://localhost:8082/login/oauth2/code/keycloak
Vous devriez pouvoir accéder à l'application sur cette url http://localhost:8082 et vous devriez voir ceci
et lorsque vous cliquez sur le lien ici, cela vous amène au formulaire keycloak où l'utilisateur doit s'authentifier avec son nom d'utilisateur et son mot de passe sous le domaine foodorder
et après vous être authentifié vous verrez la page menu
Maintenant, avec l'importance du SSO, même si je me déconnecte, je n'aurai pas à me reconnecter comme ci-dessous
alors je peux cliquer à nouveau sur le lien et je ne serai pas invité à saisir à nouveau mon mot de passe et mon nom d'utilisateur comme ci-dessous
Félicitations ?, et merci d'avoir suivi jusqu'à cette fois
Cette implémentation démontre une solution SSO robuste utilisant Keycloak et Spring Boot. Il offre une expérience d’authentification transparente tout en préservant la sécurité. La configuration permet une personnalisation et une extension faciles pour répondre aux besoins spécifiques des applications.
Si vous rencontrez des problèmes ou avez des questions sur cette implémentation, n'hésitez pas à laisser un commentaire ci-dessous. N'oubliez pas de consulter la documentation Spring Security et Keycloak pour des configurations et fonctionnalités plus avancées.
Lien vers le code sur github
Réf :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!