Spring Security + JWT 토큰을 통한 로그인

JWT 토큰을 통한 로그인

JWT(Json Web Token)은 일반적으로 클라이언트와 서버 통신 시 권한 인가(Authorization)을 위해 사용하는 토큰이다.

Security + JWT 기본 동작 원리
  1. 클라이언트에서 ID/PW를 통해 로그인 요청

  2. 서버에서 DB에 해당 ID/PW를 가진 Member가 있다면, Access Token과 Refresh Token을 발급해준다.

  3. 클라이언트는 발급받은 Access Token을 헤더에 담아서 서버가 허용한 API를 사용할 수 있게 된다.

Access Token과 Refresh Token은 웹, 앱 애플리케이션에서 인증 및 권한 부여를 관리하기 위해 사용되는 토큰이다.

Access Token + Refresh Token 재발급 원리

Access Token

인증된 사용자가 특정 리소스에 접근할 때 사용되는 토큰

  • 유효 기간이 지나면 만료

  • 만료된 경우, 새로운 Access Token을 얻기 위해 Refresh Token 사용

Refresh Token

Access Token의 갱신을 위해 사용되는 토큰

  • 일반적으로 Access Token과 함께 발급

  • Access Token이 만료되면 Refresh Token을 사용하여 새로운 Access Token 발급

  • 사용자가 지속적으로 인증 상태를 유지할 수 있도록 유지(매번 로그인할 필요 X)


실제 토큰을 생성하고 인증하는 과정을 코드를 통해서 알아보자.

JwtTokenDto

단순하고 직관적이며 널리 사용되는 Bearer 인증 방식을 사용한다.

이 인증 방식은 Access Token을 HTTP 요청의 Authorization 헤더에 포함하여 전송한다.

암호키 설정

application.propertiesjwt.secret 키를 저장한다.

해당 키는 토큰의 암호화, 복호화에 사용된다. HS256 알고리즘을 사용하기 위해 32글자 이상을 사용한다.

JwtTokenProvider

Spring Security와 JWT 토큰을 사용하여 인증과 권한 부여를 처리하는 클래스이다.

이 클래스에서 JWT 토큰의 생성, 복호화, 검증 기능이 있다.

JwtAuthenticationFilter

클라이언트 요청시 JWT 인증을 하기 위해 설치하는 커스텀 필터 로, UsernamePasswordAuthenticationFilter 이전에 실행한다. 클라이언트로부터 들어오는 요청에서 JWT 토큰을 처리하고, 유효한 토큰의 경우 해당 토큰의 인증 정보(Authentication)를 SecurityContext에 저장하여 인증된 요청을 처리할 수 있도록 한다.

즉, JWT를 통해 username + password 인증을 수행한다.

SecurityConfig

Last updated