Ce tutoriel montre comment implémenter l'authentification basique dans une application Spring Boot.
L'authentification basique est une méthode simple de sécurisation des API REST. Elle utilise un en-tête HTTP standard pour transmettre les identifiants de l'utilisateur.
- Configuration de Spring Security
- Authentification basique avec utilisateurs en mémoire
- Sécurisation des endpoints REST
- Gestion des rôles utilisateur (USER et ADMIN)
- Interface de test avec React
src/
├── main/
│ ├── java/
│ │ └── fr/eletutour/
│ │ ├── configuration/ # Configuration de sécurité
│ │ ├── controller/ # Contrôleurs REST
│ │ └── BasicAuthTutorialApplication.java
│ └── resources/
│ └── application.yml # Configuration
@Configuration
public class SecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
return http
.csrf(AbstractHttpConfigurer::disable)
.authorizeHttpRequests(auth ->
auth.requestMatchers("/goodbye").permitAll()
.anyRequest().authenticated())
.httpBasic(Customizer.withDefaults())
.build();
}
@Bean
public UserDetailsService userDetailsService(PasswordEncoder passwordEncoder) {
var user1 = User.builder()
.username("user")
.password(passwordEncoder.encode("password"))
.roles("USER")
.build();
var user2 = User.builder()
.username("admin")
.password(passwordEncoder.encode("admin123"))
.roles("ADMIN")
.build();
return new InMemoryUserDetailsManager(user1, user2);
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}@RestController
public class HelloController {
@GetMapping("/hello")
public String sayHello() {
return "Hello world!";
}
@GetMapping("/goodbye")
public String sayGoodbye() {
return "GoodBye world!";
}
}- Clonez ce dépôt
- Naviguez dans le répertoire
basic-auth-tutorial - Exécutez
mvn clean install - Lancez l'application avec
mvn spring-boot:run - Pour l'interface de test, exécutez :
npm install npm start
# Accès public
curl http://localhost:8080/goodbye
# Accès authentifié (utilisateur)
curl -u user:password http://localhost:8080/hello
# Accès authentifié (admin)
curl -u admin:admin123 http://localhost:8080/hello- Ouvrez http://localhost:3000
- Utilisez les identifiants :
- Utilisateur normal :
- Username: user
- Password: password
- Administrateur :
- Username: admin
- Password: admin123
- Utilisateur normal :
-
Sécurité :
- Utiliser HTTPS en production
- Changer les mots de passe par défaut
- Implémenter la limitation des tentatives
- Configurer les en-têtes de sécurité
-
Configuration :
- Externaliser les identifiants
- Utiliser des mots de passe forts
- Gérer les rôles de manière flexible
- Documenter les endpoints
-
Tests :
- Tester les endpoints publics et privés
- Vérifier la gestion des erreurs
- Tester les différents rôles
- Valider les réponses HTTP