>  기사  >  Java  >  Spring Security의 인증 및 권한 부여 프로세스는 어떻게 작동합니까?

Spring Security의 인증 및 권한 부여 프로세스는 어떻게 작동합니까?

WBOY
WBOY원래의
2024-04-17 16:33:01632검색

Spring Security는 다음을 포함한 인증 및 권한 부여 메커니즘을 제공합니다. 인증: 사용자 이름 및 비밀번호 또는 LDAP 인증 사용과 같은 인증 공급자를 사용하여 사용자 자격 증명의 유효성을 확인합니다. 권한 부여: 액세스 결정 관리자를 사용하여 사용자 권한과 요청된 URL을 비교하여 AffirmativeBased(일치하는 모든 역할이 액세스를 허용함) 또는 ConsensusBased(일치하는 모든 역할이 액세스를 허용함)와 같은 액세스 결정을 기반으로 액세스 권한을 부여할지 여부를 결정합니다. 실제 사례: RBAC(역할 기반 액세스 제어): UserDetailsService를 사용하여 역할을 정의하고, RoleHierarchyVoter를 사용하여 역할 계층 구조를 설정하고, AffirmativeBased를 사용하여 승인을 위해 의사결정 관리자에 액세스합니다.

Spring Security 的身份验证和授权流程是如何工作的?

Spring Security에 대한 인증 및 권한 부여 프로세스

Authentication

Spring Security는 다음과 같은 인증 공급자를 통해 인증합니다.

  • UsernamePasswordAuthenticationProvider(사용자 이름 및 비밀번호 인증 사용)
  • UserDetailsService(인증 사용자 정의 논리를 사용하는 사용자 )
  • LDAPAuthenticationProvider (LDAP를 통해 인증)
  1. 클라이언트는 사용자 이름과 비밀번호가 포함된 인증 요청을 인증 서버에 보냅니다.
  2. 인증 서버는 자격 증명을 관련 인증 공급자에게 전달합니다.
  3. 인증 공급자는 자격 증명의 유효성을 확인하고 인증된 UserDetails 개체를 반환합니다.

Authorization

성공적인 인증 후 Spring Security는 다음을 포함하는 액세스 결정 관리자를 통해 권한을 부여합니다.

  • AccessDecisionManager(액세스 허용 여부 결정)
  • AffirmativeBased(모든 역할 일치는 액세스 허용)
  • ConsensusBased(모두 액세스를 허용하려면 역할이 일치해야 합니다.)

인증 프로세스:

  1. 인증 서버는 UserDetails 개체에서 권한을 검색합니다.
  2. 액세스 결정 관리자는 사용자 권한을 요청된 URL과 비교합니다.
  3. 접근 결정에 따라 접속 허용 여부를 결정하세요.

실용 사례: 역할 기반 액세스 제어

역할 기반 액세스 제어(RBAC) 시나리오에서 인증을 위해 Spring Security를 ​​사용하려면 다음 단계를 수행할 수 있습니다.

  • 에서 사용되는 UserDetailsService를 정의합니다. 주어진 사용자 이름 뒤에 적절한 역할이 포함된 UserDetails를 반환합니다.
  • RoleHierarchyVoter를 구성하여 역할 계층을 설정하세요.
  • AffirmativeBased 액세스 결정 관리자를 구성하세요.

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 ...

}

위 내용은 Spring Security의 인증 및 권한 부여 프로세스는 어떻게 작동합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.