Servlet Authentication Architecture
I. SecurityContextHolder et SecurityContext
Spring Security est un framework robuste pour la sécurisation des applications Java. Ses deux composants essentiels sont SecurityContext et SecurityContextHolder. Comprendre ces composants est crucial pour gérer l'authentification et récupérer les informations spécifiques à l'utilisateur, comme le nom d'utilisateur de l'utilisateur actuellement connecté.
SecurityContextHolder
Au cœur du modèle d'authentification de Spring Security se trouve la classe SecurityContextHolder. Cette classe contient le conteneur SecurityContext. L'objet SecurityContextHolder au sein d'une application Spring est l'endroit où Spring Security stocke les détails de la personne authentifiée. L'objet Conteneur SecurityContext stocke les informations d'authentification et de sécurité de l'utilisateur actuellement connecté. En son sein l'objet SecurityContext contient un objet Authentication, qui représente le principal (l'utilisateur) et les droits qui lui sont accordés (rôles/autorisations).Spring Security ne se soucie pas de la manière dont le SecurityContextHolder est renseigné. S'il contient une valeur, il est utilisé comme utilisateur actuellement authentifié. Le moyen le plus simple d'indiquer qu'un utilisateur est authentifié est de définir directement le SecurityContextHolder
SecurityContext
Comme on l'a dit ci-dessus le Conteneur SecurityContext est obtenu à partir de SecurityContextHolder et il contient l'interface Authentication qui représente l'authentification de l'utilisateur actuellement authentifié.
Authentication
L'interface Authentication est le type du paramètre d'entrée de la méthode authenticate(...) mais aussi elle est le type de retour d la méthode authenticate(...) de l'interface AuthenticationManager pour fournir les informations d'identification qu'un utilisateur a fourni pour s'authentifier ou de l'utilisateur actuel dans SecurityContext.
L'interface Authentication remplit deux fonctions principales dans Spring Security :
1) Une entrée dans AuthenticationManager pour fournir les identifiants fournis par un utilisateur pour s'authentifier. Dans ce cas, isAuthenticated() renvoie false.
2) Représente l'utilisateur actuellement authentifié. Vous pouvez obtenir l'authentification actuelle à partir du SecurityContext. Cette interface Authentication derive de l'interface Principal(identifie l'utilisateur); Lors d'une authentification avec un nom d'utilisateur/mot de passe, il s'agit souvent d'une instance de UserDetails.elle permet aussi d'avoir accès aux credentials(souvent un mot de passe) Dans de nombreux cas, il est effacé après l'authentification de l'utilisateur afin d'éviter toute fuite mais aussi aux authorities; les instances GrantedAuthority sont des autorisations de haut niveau accordées à l'utilisateur. Les rôles en sont deux exemples.
GrantedAuthority - Une autorisation accordée au "Principal" ( voir Principal) sur l'authentification (c'est-à-dire les rôles, les portées, etc.) ....
AuthenticationManager - l' API qui définit comment les Filtre de Spring Security procèdent pour l "Authentication" ....
ProviderManager - Classe qui implémente l'interface AuthenticationProvider qui dérive de l'interface AuthenticationManager.
AuthenticationProvider - interface implémentée par ProviderManager pour préciser le type spécial utilisé par l'interface Authentication.
.....