JWT (Json Web Token)
JWT는 Stateless 상태를 유지하며, 서버에서 사용자를 식별할 수 있는 수단을 제공한다.
- 서버에서 사용자가 성공적으로 로그인을 하면 JWT를 반환해준다.
- 클라이언트는 JWT를 로컬 영역에 저장하고, 이후 서버에 요청을 보낼 때 JWT를 HTTP 헤더에 Bearer Authentication Token을 포함시킨다.
- 서버는 클라이언트가 전달한 JWT를 통해 사용자를 식별 한다.
Bearer
JWT 혹은 OAuth에 대한 토큰을 사용한다. (RFC 6750)
JWT 의존성 추가 및 설정
implementation 'com.auth0:java-jwt:3.18.2'
application.yml JWT 관련 설정
jwt 토큰 방식을 header 에 toekn (커스텀 토큰) 방식 아닌 authorization 으로 받도록 처리하다.
Config > Security
@ConfigurationProperties(prefix = "security") 쓰기 위해 의존성 추가
annotationProcessor "org.springframework.boot:spring-boot-configuration-processor"
JWT 클래스
- JWT 발행을 위한 sign 메소드
- JWT 발행을 위한 verify 메소드
JwtAuthentication 클래스
- 인증 완료 후 token, userId, useranme을 담기 위함.
JwtAuthentiactionToken 클래스
- pricipal은 JwtAuthentication
JwtAuthenticationProvider 클래스
- JwtAuthenticationToken 타입을 처리할 수 있는 AuthenticationProvider 인터페이스 구현체를 추가
JwtAuthenticationFilter 클래스
- 헤더에서 토큰을 가져온 다음 JWT 토큰을 검증하고, 디코딩한 다음 JwtAuthenticationToken 객체를 생성
- principal 필드 — JwtAuthentication 객체
- details 필드 — WebAuthenticationDetails 객체 (클라이언트 IP 정보를 지니고 있음)