Esta es una demostración para usar JWT (JSON Web Token) con Spring Security y Spring Boot . Reescribí completamente mi primera versión. Ahora bien, esta solución se basa en el código base del Proyecto JHipster. Intenté extraer la configuración y las clases mínimas necesarias para la autenticación JWT e hice algunos cambios.
Esta demostración está construida con Maven 3.6.x y Java 11.
Simplemente inicie la aplicación con el complemento Spring Boot maven ( mvn spring-boot:run
). La aplicación se ejecuta en http://localhost:8080.
Puede utilizar H2-Console para explorar la base de datos en http://localhost:8080/h2-console:
Hay tres cuentas de usuario presentes para demostrar los diferentes niveles de acceso a los puntos finales en la API y las diferentes excepciones de autorización:
Admin - admin:admin
User - user:password
Disabled - disabled:password (this user is deactivated)
Hay cuatro puntos finales que son razonables para la demostración:
/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)
Escribí un pequeño cliente Javascript y puse algunos comentarios en el código que espero que hagan comprensible esta demostración. Puede encontrarlo en /src/main/resources/static/js/client.js.
Estoy usando bcrypt para codificar contraseñas. Puedes generar tus hashes con esta sencilla herramienta: Bcrypt Generator
En realidad, esta demostración utiliza una base de datos H2 integrada que Spring Boot configura automáticamente. Si desea conectarse a otra base de datos, debe especificar la conexión en application.yml en el directorio de recursos. Aquí hay un ejemplo para una base de datos 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
Sugerencia: para otras bases de datos como MySQL, las secuencias no funcionan para la generación de ID. Por lo tanto, debe cambiar el GenerationType en los beans de entidad a 'AUTO' o 'IDENTITY'.
Puede encontrar una referencia de todas las propiedades de la aplicación aquí.
#81
Este proyecto tiene una imagen acoplable. Puede encontrarlo en https://hub.docker.com/r/hubae/jwt-spring-security-demo/.
Si tiene preguntas relacionadas con el proyecto, consulte las preguntas anteriores o cree un ticket nuevo con su pregunta.
Si tiene preguntas que no están directamente relacionadas con este proyecto (por ejemplo, preguntas comunes sobre Spring Framework o Spring Security, etc.), busque en la web o consulte Stackoverflow.
Lo siento pero estoy muy ocupado ahora mismo y no tengo mucho tiempo.
Stephan Zerhusen
El código se publica bajo la licencia MIT.
¡No dudes en enviarme comentarios o preguntas!