Il s'agit d'une démo pour utiliser JWT (JSON Web Token) avec Spring Security et Spring Boot . J'ai complètement réécrit ma première version. Désormais, cette solution est basée sur la base de code du projet JHipster. J'ai essayé d'extraire la configuration minimale et les classes nécessaires à l'authentification JWT et j'ai apporté quelques modifications.
Cette démo est construite avec Maven 3.6.x et Java 11.
Démarrez simplement l'application avec le plugin maven Spring Boot ( mvn spring-boot:run
). L'application s'exécute sur http://localhost:8080.
Vous pouvez utiliser la H2-Console pour explorer la base de données sous http://localhost:8080/h2-console :
Trois comptes d'utilisateurs sont présents pour démontrer les différents niveaux d'accès aux points de terminaison dans l'API et les différentes exceptions d'autorisation :
Admin - admin:admin
User - user:password
Disabled - disabled:password (this user is deactivated)
Il existe quatre points de terminaison raisonnables pour la démo :
/api/authenticate - authentication endpoint with unrestricted access
/api/user - returns detail information for an authenticated user (a valid JWT token must be present in the request header)
/api/persons - an example endpoint that is restricted to authorized users with the authority 'ROLE_USER' (a valid JWT token must be present in the request header)
/api/hiddenmessage - an example endpoint that is restricted to authorized users with the authority 'ROLE_ADMIN' (a valid JWT token must be present in the request header)
J'ai écrit un petit client Javascript et mis quelques commentaires dans le code qui, je l'espère, rendent cette démo compréhensible. Vous pouvez le trouver dans /src/main/resources/static/js/client.js.
J'utilise bcrypt pour encoder les mots de passe. Vous pouvez générer vos hachages avec cet outil simple : Bcrypt Generator
En fait, cette démo utilise une base de données H2 intégrée qui est automatiquement configurée par Spring Boot. Si vous souhaitez vous connecter à une autre base de données, vous devez spécifier la connexion dans le fichier application.yml du répertoire des ressources. Voici un exemple pour une base de données MySQL :
spring:
jpa:
hibernate:
# possible values: validate | update | create | create-drop
ddl-auto: create-drop
datasource:
url: jdbc:mysql://localhost/myDatabase
username: myUser
password: myPassword
driver-class-name: com.mysql.jdbc.Driver
Astuce : pour d'autres bases de données comme MySQL, les séquences ne fonctionnent pas pour la génération d'ID. Vous devez donc changer le GenerationType dans les beans entité en « AUTO » ou « IDENTITY ».
Vous pouvez trouver une référence de toutes les propriétés de l'application ici.
#81
Ce projet a une image docker. Vous pouvez le trouver sur https://hub.docker.com/r/hubae/jwt-spring-security-demo/.
Si vous avez des questions liées au projet, veuillez jeter un œil aux questions précédentes ou créer un nouveau ticket avec votre question.
Si vous avez des questions qui ne sont pas directement liées à ce projet (par exemple, questions courantes sur Spring Framework ou Spring Security, etc.), veuillez effectuer une recherche sur le Web ou consulter Stackoverflow.
Désolé pour ça, mais je suis très occupé en ce moment et je n'ai pas beaucoup de temps.
Stéphane Zerhusen
Le code est publié sous licence MIT.
N'hésitez pas à m'envoyer des commentaires ou des questions !