JWT ??
JWT(JSON 웹 토큰)는 JSON WEB TOKEN의 줄임 말로 클라이언트와 서버, 서비스와 서비스 사이에서 통신을 할 수 있도록 권한을 주는 토큰이라고 생각을 하면됩니다.. 즉, 놀이공원 자유이용권 팔찌를 주면 놀이기구를 마음대로 탈 수있듯이 권한을 받은 유저는 서비스를 이용 할수있는 개념 정도로 이해하면 될 듯합니다.
JWT의 구조
- 헤더(Header)
{
"alg" : "HS256", // 알고리즘 타입
"typ" : "JWT" // 토큰 타입
}
헤더는 보통 토큰의 타입이나, 서명 생성에 어떤 알고리즘이 사용되었는지 저장을 합니다.
- 페이로드(PayLoad)
{
"loggedInAs" : "admin",
"iat" : 1422779638
}
페이로드는 토큰에 사용할 정보를 가지고 있는 곳 입니다. 하지만 민감한 정보는 담지 않습니다.
왜냐하면 암호가 따로 걸려 있지 않기 때문에 누구나 디코딩을 해서 값을 알 수 있기 때문입니다. 그래서 보통 은 '식별을 하기 위한 정보만 담아둔다...'를 생각하시면 될 것같습니다.
- 서명(Signature)
HMAC-SHA256(
secret,
base64urlEncoding(header) + '.' +
base64urlEncoding(payload)
)
서명은 가장 중요한 정보를 가지고 있는 곳 입니다. 그래서 헤더와 페이로드의 정보를 암호화 하고 서로를 합쳐놓습니다. 서버가 가지고 있는 개인키를 가지고 암호화가된 상태라고 생각하시면 됩니다. 그렇기 때문에 서버에 있는 개인키로만 암호화를 풀 수 있기 때문에 다른 클라이언트가 임의로 복사나 해독이 불가능 합니다.
JWT의 인증방식
- JWT 토큰을 클라이언트가 서버로 요청과 동시에 전달을 해준다.
- 서버가 가지고 있는 개인키를 가지고 서명부분을 복사한 다음 서로 값이 일치하는지 확인을 하고 일치한다면 인증을 허용해준다.
JWT의 장점
- 별도의 저장소에 필수적으로 저장을 할 필요가 없다.
- 클라이언트의 상태를 서버가 저장해 두지 않아도 된다.
- 데이터에 대한 보완성이 높아진다.