[Tistory] Spring Security의 인증 과정과 주요 모듈

원글 페이지 : 바로가기

1. Spring Security 인증 과정 1) 로그인 요청 사용자가 폼에 아이디, 패스워드를 입력하면 HttpServletRequest에 아이디, 비밀번호가 전달된다. AuthenticationFilter가 넘어온 아이디, 비밀번호의 유효성 검사를 실시한다. 2) Authentication 생성 유효성 검사 후 실제 구현체인 UsernamePasswordAuthenticationToken을 만들어 넘겨준다. 3) Authentication 전달 인증용 객체인 UsernamePasswordAuthenticationToken을 AuthenticationManager에 전달한다. 4) UsernamePasswordAuthenticaionToken을 AuthenticationProvider에 전달 5) 유효성 검증 사용자 아이디를 UserDetailsService로 보낸다. UserDetailsService는 사용자 아이디로 찾은 사용자의 정보를 UserDetails 객체로 만들어 AuthenticationProvider에게 전달한다. 6) 사용자 조회 데이터베이스에 있는 사용자 정보를 가져온다. 7) UserDetails 생성 입력 정보와 UserDetails의 정보를 비교해 실제 인증 처리를 진행한다. 8) UserDetails를 Authentication Provider로 전달 9) UserDetails를 Authentication Manager로 전달 10) AuthenticationFilter로 UserDetails를 넘김 11) Authentication 저장 8~10까지 인증이 완료되면 SecurityContextHolder에 Authentication을 저장한다. 인증 성공 여부에 따라 성공 시 AuthenticationSuccessHandler, 실패 시는 AuthenticationFailuerHandler를 실행한다. 2. SpringSecurity의 주요 모듈 1) SecurityContextHolder, SecurityContext, Authentication 유저의 아이디와 패스워드 사용쟈 정보를 넣고 실제 가입된 사용자인지를 체크한다. 인증에 성공하면 사용자의 principal과 credential정보를 authentication 안에 담는다. Authenticaion 클래스는 현재 접근하는 주체의 정보와 권한을 담는 인터페이스로 SecurityContext의 Authenticatino에 저장된다. SecurityContextHolder를 통해 SecurityContext에 접근하고 SecurityContext를 통해 Authenticatino에 접근할 수 있다. 2) UsernamePasswordAuthenticationToken Authentication을 구현한 AbstracAuthenticationToken의 하위의 하위 클래스이다. 유저의 ID가 Principal, PW는 Credential 역할을 하는데, UsernamePasswordAuthenticationToken의 첫 번째 생성자는 인증 전제 객체를 생성하고 두 번째는 인증이 완료된 객체를 생성한다. 3)AuthenticationManager 인증에 대한 부분을 처리하는 클래스로 실질직으로는 AuthenticatinoManager에 등록된 AuthenticationProvider에 의해서 처리된다. 인증에 성공하면 두 번째 생성자를 이용해 생성한 객체를 SecurityContext에 저장한다. 4) AuthenticationProvider 실제 인증에 대한 부분을 처리하는 작업을 치룬다. 인증 전 Authenticatino객체를 받아 인증이 완료된 객체를 반환하는 역할을 하고 AuthenticatinoProvider인터페이스를 구현해 custom AuthenticationProvider를 작성하고 AuthenticationManager에 등록하면 된다. 5) ProviderManager AuthenticationManager를 구현한 것으로 AuthenticationProvider를 구성하는 목록을 가진다. 6) UserDetailService UserDetails객체를 반환하는 하나의 메소드만을 가진다. 일반적으로 이를 구현한 클래스에서 UserRepository를 주입받아 데이터베이스와 연결해 처리한다. 7) UserDetails 인증에 성공해 생성된 UserDetails클래스는 Authenticatino객체를 구현한 UsernamePasswordAuthenticatinoToken을 생성하기 위해 사용되는데, UserDetails를 구현해 처리 가능하다. 8) SecurityContextHolder 보안 주체의 세부 정보를 포함해 응용프로그램의 현재 보안 컨텍스트에 대한 세부 정보가 저장된다. 9) SecurityContext Authentication을 보관하는 역할을 하고 SecurityContext를 통해 Authentication을 저장하거나 꺼내올 수 있다. 10) GrantedAuthority 현재 사용자(Principal)가 갖고 있는 권한을 의미하고 ROLE_*의 형태로 사용한다. UserDetailsService에 의해 불러올 수 있고 특정 자원에 대한 권한이 있는지 없는지를 검사해 접근 허용 여부를 결정한다. [참고 자료] https://velog.io/@hope0206/Spring-Security-%EA%B5%AC%EC%A1%B0-%ED%9D%90%EB%A6%84-%EA%B7%B8%EB%A6%AC%EA%B3%A0-%EC%97%AD%ED%95%A0-%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0 https://velog.io/@wlstjdwkd/Spring-Security-%EC%8A%A4%ED%94%84%EB%A7%81-%EC%8B%9C%ED%81%90%EB%A6%AC%ED%8B%B0%EB%9E%80 https://velog.io/@kwj1830/codestates29

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다