Authentication

  • principal 과 grantAuthority를 authentication에 넣어서 관리함

1. principal

  • 인증을 거치고 난 후 인증된 사용자 정보

  • authentication은 securityContext로 한번 감싸고 감싼걸 다시

  • securityContextHolder로 감싼다.

  • form 인증시 authentication의 구현체 usernamepasswordAuthenticationToken이

  • authentication에 담긴다.

  • UserDetailsService를 구현한 클래스에서 UserDetails를

  • return하는 loadUserByUsername이란 메소드에서 return하는 객체의 type이 곧 principle

2. grantAuthority

  • SimpleGrantedAuthority 객체에 권한이 담겨져있음.

SecurityContext

  • authentication을 제공함.

SecurityContextHolder

  • securityContext를 제공하고 기볹벅으로 ThreadLocal을 사용한다.
  • ThreadLocal (한 thread 내에서 공유하는 저장소)
  • thread가 변경되면 제대로 된 authentication 정보를 참조할수 없다.

UserDetailsService

  • 유저정보를 UserDetails 타입으로 가져오는 DAO 인터페이스
  • 인증을 하는건 아님.
  • spring security한테 유저정보를 제공하는 역할
  • 실제로 인증을 하는 역할은 authenticationManager

AuthenticationManager

  • 실제 인증을 담당하는 역할
  • 구현체로 ProviderManager 를 기본으로 사용.

ProviderManager

  • ProviderManager에서 인증을 AuthenticationProvider를 구현한 구현체들한테 위임하는데
  • AuthenticationProvider를 구현한 구현체중 AnonyMousAuthenticationProvider로 검사하고
  • 없으면 parent ProviderManager 를 호출 DAOAuthenticationProvider로 검사한다.
  • 여러 절차를 거치고 retriveUser 메소드에서 loadUserByUsername 메소드를 호출한다.
  • loadUserByUsername은 사용자가 따로 UserDetailServer로 구현한 메소드가 있다면
  • 그걸 return하고 아니면 UserDetail 타입으로 return한다.

'개발 > SpringSecurity' 카테고리의 다른 글

Spring Security - 2  (0) 2020.08.10

+ Recent posts