Maison  >  Article  >  Java  >  Comment fonctionne le processus d'authentification et d'autorisation de Spring Security ?

Comment fonctionne le processus d'authentification et d'autorisation de Spring Security ?

WBOY
WBOYoriginal
2024-04-17 16:33:01594parcourir

Spring Security fournit des mécanismes d'authentification et d'autorisation, notamment : Authentification : vérifiez la validité des informations d'identification de l'utilisateur à l'aide d'un fournisseur d'authentification, par exemple en utilisant un nom d'utilisateur et un mot de passe ou une authentification LDAP. Autorisation : utilisez un gestionnaire de décision d'accès pour comparer les autorisations des utilisateurs et l'URL demandée afin de déterminer s'il faut accorder l'accès en fonction d'une décision d'accès, telle que AffirmativeBased (tout rôle correspondant autorise l'accès) ou ConsensusBased (tous les rôles correspondant autorisent l'accès). Cas pratique : RBAC (role-based access control) : Utilisez UserDetailsService pour définir les rôles, utilisez RoleHierarchyVoter pour établir la hiérarchie des rôles et utilisez AffirmativeBased pour accéder au gestionnaire de décision pour autorisation. "Processus d'authentification et d'autorisation pour Spring Security"

UserDetailsService (authentifier l'utilisateur à l'aide d'une logique personnalisée )

Spring Security 的身份验证和授权流程是如何工作的?LDAPAuthenticationProvider (authentifier via LDAP)

Le client envoie une demande d'authentification au serveur d'authentification, qui contient le nom d'utilisateur et le mot de passe.

Le serveur d'authentification transmet les informations d'identification au fournisseur d'authentification concerné. Le fournisseur d'authentification vérifie la validité des informations d'identification et renvoie un objet UserDetails authentifié.

    Autorisation
  • Après une authentification réussie, Spring Security autorise via le gestionnaire de décision d'accès, qui comprend :
  • AccessDecisionManager (détermine s'il faut accorder l'accès)
    AffirmativeBased (toute correspondance de rôle autorise l'accès)
  1. ConsensusBased (tous Les rôles doivent correspondre pour autoriser l'accès)
  2. Processus d'autorisation :

Le serveur d'authentification récupère les autorisations dans l'objet UserDetails. Access Decision Manager compare les autorisations des utilisateurs à l'URL demandée.

Décidez d'accorder ou non l'accès en fonction de la décision d'accès.

  • Cas pratique : contrôle d'accès basé sur les rôles
  • Dans un scénario de contrôle d'accès basé sur les rôles (RBAC), vous pouvez effectuer les étapes suivantes pour utiliser Spring Security pour l'autorisation :

Définir un service UserDetails utilisé dans a donné renvoie UserDetails avec le rôle approprié après le nom d'utilisateur.

    Configurez RoleHierarchyVoter pour établir la hiérarchie des rôles.
  1. Configurez le gestionnaire de décision d'accès basé sur l'affirmation.
  2. Configuration

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(AuthenticationManagerBuilder auth) {
        auth.userDetailsService(userDetailsService());
    }

    @Override
    protected void configure(HttpSecurity http) {
        http.authorizeRequests()
                .antMatchers("/admin/**").hasRole("ROLE_ADMIN")
                .antMatchers("/user/**").hasRole("ROLE_USER")
                .anyRequest().permitAll();
    }

}
UserDetailsService

@Service
public class UserDetailsServiceImpl implements UserDetailsService {

    @Override
    public UserDetails loadUserByUsername(String username) {
        User user = userRepository.findByUsername(username);
        return new UserDetailsAdapter(user);
    }

}

    UserDetailsAdapter
  • public class UserDetailsAdapter implements UserDetails {
    
        private final User user;
    
        public UserDetailsAdapter(User user) {
            this.user = user;
        }
    
        // ... UserDetails implementation methods ...
    
    }

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn