JWT란?
- JWT는 JSON Web Token의 약자로 전자 서명 된 URL-safe (URL로 이용할 수 있는 문자 만 구성된)의 JSON이다.
- JWT는 속성 정보를 JSON 데이터 구조로 표현한 토큰으로 RFC7519 표준이다.
- JWT는 서버와 클라이언트 간 정보를 주고 받을 때 HTTP Request Header에 JSON 토큰을 넣은 후 서버는 별도의 인증 과정없이 헤더에 포함되어 있는 JWT 정보를 통해 인증한다. - JWToken에 정보를 담아서 전달하기에 서버에서 별도의 인증없이 JWT만으로 인증이 가능한것같음.
- 이때 사용되는 JSON 데이터는 URL-Safe 하도록 URL에 포함할 수 있는 문자만으로 만든다.
- JWT는 HWAC 알고리즘을 사용하여 비밀키 또는 RSA를 이용한 (Public Key/Private Key)쌍 으로 서명할 수 있다.
JWT 토큰 구성
header.payload.signature
- header: 토큰의 타입과 해시 암호화 알고리즘으로 구성되어 있다.
- payload: 토큰에 담을 클레임(claim) 정보를 포함하고 있다. name-value 한 쌍으로 이루어져있고, 여러개의 클레임 들을 넣을 수 있다.
- signature: secret key를 포함하여 암호화되어 있다.
JWT를 통한 Client-Server간 인증 과정
- Client에서 로그인을 하면
- Server에서 로그인 확인 후 secret kety를 통해 Access token을 발급하여 클라이언트에 JWT를 반환해준다.
- 그 후 JWT를 클라이언트에서 보관하다 서버에 요청을 할 때 마다 JWT를 같이 Request Header에 전달해주면
- 서버에서 클라이언트가 준 JWT의 서명을 체크하고 JWT에서 사용자 정보를 확인한 뒤
- 올바를 경우 클라이언트의 Request에 맞는 Response를 반환하고, 맞지 않을 경우 그에 따른 처리를 한다.
JWT 장점
- 사용자 인증에 필요한 모든 정보는 토큰 자체에 포함하기 때문에 별도의 인증 저장소가 필요없다.
참고 - [http://www.opennaru.com/opennaru-blog/jwt-json-web-token/]