[Spring] SpringSecurity와 JWT

C____JIN·2022년 6월 17일
0

인증(Authentication)과 권한(Authorization)

인증(Authentication)

  • 사용자에게 적절한 접근 권한이 있는지 확인하는 일련의 과정
  • 아이디와 비밀번호를 입력받아 로그인하는 과정 자체를 의미

권한(Authorization)

  • 인증절차가 끝난 접근 주체가 보호된 리소스에 접근 가능한지를 결정하는 것
  • 인가(Authorize)
    - 권한을 부여하는 작업

Spring Security

인증 매커니즘을 간단하게 만들 수 있도록 다양한 옵션들을 제공한다. 웹 요청이나 메소드 호출, 도메인 인스턴스에 대한 접근 등 상당히 깊은 수준의 권한 부여를 제공

스프링 시큐리티의 구조

  1. 사용자가 로그인 정보와 함께 인증 요청(Http Request)

  2. AuthenticationFilter가 이 요청을 가로챕니다. 이 때 가로챈 정보를 통해 UsernamePasswordAuthenticationToken이라는 인증용 객체를 생성합니다.

  3. AuthenticationManager의 구현체인 ProviderManager에게 UsernamePasswordAuthenticationToken 객체를 전달합니다.

  1. 다시 AuthenticationProvider에 UsernamePasswordAuthenticationToken 객체를 전달합니다.

  2. 실제 데이터베이스에서 사용자 인증정보를 가져오는 UserDetailsService에 사용자 정보(아이디)를 넘겨줍니다.

  3. 넘겨받은 사용자 정보를 통해 DB에서 찾은 사용자 정보인 UserDetails 객체를 만듭니다. 이 때 UserDetails 는 인증용 객체와 도메인용 객체를 분리하지 않고 인증용 객체에 상속해서 사용하기도 합니다.

  4. AuthenticationProvider는 UserDetails를 넘겨받고 사용자 정보를 비교합니다.

  5. 인증이 완료되면 권한 등의 사용자 정보를 담은 Authentication 객체를 반환합니다.

  6. 다시 최초의 AuthenticationFilter에 Authentication 객체가 반환됩니다.

  7. Authentication 객체를 SecurityContext에 저장합니다.

JWT(Json Web Token)

JSON 객체를 통해 안전하게 정보를 전송할 수 있는 웹표준(RFC7519)

Reference

profile
개발 블로그🌐 개발일지💻

0개의 댓글