[JAVA] À propos de l'authentification Spring Security

Aperçu

C'est un mémorandum parce que j'ai enquêté sur l'authentification de Spring Security.

Schématique

Screen Shot 2019-08-14 at 19.52.18.png

SecurityFilterChain est appliqué à la demande. Par défaut, UsernamePasswordAuthenticationFilter est responsable de l'authentification (s'applique aux chemins spécifiés, par exemple / login). AuthenticationManager est appelé depuis Filter et décide de s'authentifier ou non. AuthenticationManager a plusieurs fournisseurs d'authentification et délègue le traitement des autorisations / refus d'authentification à chaque fournisseur.

AuthenticationFilter Il est appliqué à l'URL qui exécute le processus d'authentification. Effectue une vérification nulle de l'entrée utilisateur, émet un UsernamePasswordAuthenticationToken en fonction des informations d'entrée et délègue l'autorisation d'authentification au gestionnaire.

UsernamePasswordAuthenticationToken Un objet de données qui a une valeur d'entrée qui hérite de AbstractAuthenticationToken et un paramètre de champ qui est utilisé pour le jugement d'authentification. Chaque fournisseur reçoit cet objet et détermine s'il peut être authentifié à partir des paramètres de champ.

AuthenticationManager L'interface org.springframework.security.authentication.AuthenticationManager. Une seule méthode est définie pour cette interface.

AuthenticationManager.java


Authentication authenticate(Authentication authentication)
			throws AuthenticationException;

La classe d'implémentation par défaut est org.springframework.security.authentication.ProviderManager.

ProviderManager a un tableau de AuthenticationProviders qui jugent réellement la correspondance de mot de passe, etc., et appelle la méthode d'authentification de chaque fournisseur pour effectuer un jugement d'authentification.

AuthenticationProvider C'est une classe qui fait en fait un jugement d'authentification (par exemple, correspondance de mot de passe, etc.). Comme mentionné ci-dessus, plusieurs fournisseurs peuvent être enregistrés.

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
	    auth.authenticationProvider(authProvider());
        auth.authenticationProvider(authProvider2());
    }

    public AuthenticationProvider authProvider() {
	    return new AbstractUserDetailsAuthenticationProvider() {

	        @Override
	        protected void additionalAuthenticationChecks(UserDetails userDetails,
		        UsernamePasswordAuthenticationToken authentication) throws AuthenticationException {
		      // 
	        }

	        @Override
	        protected UserDetails retrieveUser(String username, UsernamePasswordAuthenticationToken authentication)
		        throws AuthenticationException {
		        //Le processus de création d'un utilisateur spécifique que vous souhaitez utiliser pour la connexion
		        return user;
	        }
	    };
    }

Il peut ne pas être utilisé très souvent, mais si vous obligez le fournisseur à renvoyer un utilisateur qui hérite de UserDetails, Cela peut également être comme une authentification en mémoire.

Pour enregistrer un fournisseur, ajoutez simplement une annotation de bean sous la classe de configuration qui hérite de WebSecurityConfigurerAdapter.

    @Bean
    public AuthenticationProvider authProvider() {
	    return new CustomAuthenticationProvider(passwordEncoder, authenticationService);
    }

Les informations utilisateur dans la base de données sont acquises dans la méthode retrieveUser du fournisseur, et l'authentification est jugée en confirmant la correspondance du mot de passe.

C'est facile, mais c'est un résumé. En regardant l'implémentation interne, c'est intéressant car il existe des contre-mesures d'attaque de synchronisation contre le hachage de mot de passe.

Vous pouvez consulter cet article pour un résumé de Spring Security dans son ensemble. Note de base sur l'utilisation de Spring Security / mécanisme

Recommended Posts

À propos de l'authentification Spring Security
À propos du printemps ③
Authentification / autorisation de mémo d'utilisation de Spring Security
Mise en œuvre de la fonction d'authentification avec Spring Security ②
Implémentez la fonction d'authentification avec Spring Security ③
Tutoriel Spring Boot à l'aide de l'authentification Spring Security
Mise en œuvre de la fonction d'authentification avec Spring Security ①
Découvrez l'architecture de traitement de l'authentification Spring Security
Certification / autorisation avec Spring Security & Thymeleaf
À propos de Spring AOP
À propos de Spring AOP
Authentification DB avec Spring Security et hachage avec BCrypt
Obtenez une authentification BASIC avec Spring Boot + Spring Security
À propos de DI of Spring ①
Essayez l'authentification LDAP avec Spring Security (Spring Boot) + OpenLDAP
A propos de Spring AOP Pointcut
À propos de DI of Spring ②
Spring Security soulève 403 interdits
Ajoutez vos propres éléments d'authentification avec Spring Security
[Introduction à Spring Boot] Fonction d'authentification avec Spring Security
Créer une authentification par clé API pour l'API Web dans Spring Security
[Notes personnelles] À propos du framework Spring
Mémo d'utilisation de Spring Security CSRF
À propos de l'erreur de contexte Spring Framework
Mémo d'utilisation de Spring Security Run-As
Spring Security Usage Memo Method Security
Mémo d'utilisation de Spring Security Remember-Me
Fonction de connexion avec Spring Security
[Spring Security] Spring Security sur GAE (SE)
Essayez d'utiliser Spring Boot Security
Mémo d'utilisation de Spring Security CORS
Test de mémo d'utilisation de Spring Security
À propos des annotations liées à Spring DI
Utiliser l'authentification de base avec Spring Boot
Une erreur 404 se produit lors du test de l'authentification par formulaire avec Spring Security
En-tête de réponse de mémo d'utilisation de Spring Security
À propos de l'authentification par signature avec Java Time 1
A propos de la liaison de l'annotation Spring AOP
Authentification Oauth2 avec Spring Cloud Gateway
Gestion des sessions de mémo d'utilisation de Spring Security
À propos =
Mémo d'utilisation de Spring Security Basic / mécanisme
À propos des erreurs lors de la mise en œuvre de la validation du printemps
Spring Security appelle mon AuthenticationProvider deux fois et l'authentification échoue
Introduction de l'authentification de base à Heroku [Spring Framework]
Spring Security Usage Memo Domain Object Security (ACL)
Injection de dépendances Spring à l'aide de Java, Kotlin
Essayez le cryptage / décryptage de la chaîne Spring Security AES256
Le test Spring Boot @WebMvcTest active la sécurité par défaut de Spring Security
À propos de l'affichage initial de Spring Framework
Utiliser les balises JSP Spring Security avec FreeMarker
Comment Spring Security fonctionne avec Hello World
Implémentation de la fonction de connexion par Spring Security (securityConfig)
Exemple d'implémentation lors de l'utilisation de l'authentification par formulaire et de l'authentification d'en-tête de demande dans Spring Security