[Spring Security] JWT Authentication

반응형

이번글에서는 Spring Security의 JWT Authentication에 대해 알아보도록 하겠습니다.

1. JWT Authentication이란?

digitally signed된 token을 전달해 사용자를 인증하는 방식입니다.

이때 사용되는 token을 JSON Web Token(JWT)이라고 하며, 이는 apps 간의 data를 transmit하는데 compact하고 safe한 방법을 제공합니다.

1-1) login process

login process는 다음과 같습니다.

• client는 Auth Server에 로그인을 합니다. 이때 Auth Server는 application server 내에 위치할 수도 있으며, facebook, goole과 같은 제 3자가 될 수 도 있습니다.

• Auth Server에서 인증을 완료한 사용자는 JWT Token을 전달받습니다.

• client는 application server에 resource를 요청할때 앞서 전달받은 JWT Token을 Authorization Header에 전달합니다.

• application server는 전달받은 JWT Token이 유효하면 200 ok와 함께 data를 response 합니다.

이때 중요한점은 application server가 더이상 로그인한 사용자의 session을 관리하지 않는다는 것 입니다. 단지 전달받은 JWT가 유효한 Token인지만 확인하면 됩니다. 😎

또한, outside domain인 client가 application server에 resource를 요청하기위해 application server는 cors를 enable 해야합니다.

cors를 enable 하지 않으면 기본적으로 application server는 외부 domain에 resource 접근을 허용하지 않습니다.

1-2) when should you use

JWT는 다음과 같은 환경에서 사용합니다.

• 하나의 End Point가 아닌 Mobile/Web 등의 multiple endpoint 환경이라면 통합적인 인증/인가 환경을 제공하기위해선 반드시 JWT를 사용합니다.

• 보편적인 예로, React로 client를 구성하고 REST API 서버를 따로 두는 경우에는 JWT를 사용합니다.

• 3rd party에게 public 하게 open 한 REST Endpoint가 존재할 경우 해당 3rd party의 인증/인가를 관리하기 위해 JWT를 사용합니다.

2. JWT

이번엔 JWT를 자세히 살펴보겠습니다.

JWT는 위와 같이 Header / Payload / Signature 3가지 part로 구성됩니다.

이때 각각의 part는 다음과 같은 정보를 가집니다.

• Header : token의 type과 JWT를 digitally sign할때 사용한 algorithm을 정의합니다.

• Payload : JWT에 담아서 전달할 data를 정의합니다.

• Signature : 위의 Header와 Payload 값을 base64로 encode한 값을 JWT secret key 값으로 encrypt한 값을 명시합니다.

Signature

HMACSHA256 {
    base64UrlEncode(header) + "." +
    base64UrlEncode(payload),
    your-256-bit-secret
} secret base64 encoded

참고 자료 : https://www.youtube.com/playlist?list=PLVApX3evDwJ1d0lKKHssPQvzv2Ao3e__Q


추천서적

 

스프링5 레시피:스프링 애플리케이션 개발에 유용한 161가지 문제 해결 기법

COUPANG

www.coupang.com

파트너스 활동을 통해 일정액의 수수료를 제공받을 수 있음


반응형

댓글

Designed by JB FACTORY