본문 바로가기

내일배움캠프/Today I Learned

[TIL] 나의 서른 한번째 회고록

보통 서버가 클라이언트 인증을 확인하는 방식은 대표적으로 쿠키, 세션, 토큰 3가지 방식이 있다.

예전에 배웠을 때는 쿠키, 세션 이렇게 두가지 개념만 기본으로 사용해보고 지나갔던 경험이 있다. 

개인과제를 하면서 JWT를 처음 접해보았다. 

 

JWT?는 뭐지? 처음들어봐서 

정확하게 JWT란 무엇일까? 궁금해졌다. 

 

JWT 란?

JWT(JSON Web Token)란 인증에 필요한 정보들을 암호화시킨 JSON 토큰을 의미한다.

그리고 JWT 기반 인증은 JWT 토큰(Access Token)을 HTTP 헤더에 실어 서버가 클라이언트를 식별하는 방식이다

 

JWT는 JSON 데이터를 Base64 URL-safe Encode 를 통해 인코딩하여 직렬화한 것이며, 토큰 내부에는 위변조 방지를 위해 개인키를 통한 전자서명도 들어있다.

따라서 사용자가 JWT 를 서버로 전송하면 서버는 서명을 검증하는 과정을 거치게 되며 검증이 완료되면 요청한 응답을 돌려준다.

 

JWT 구조

JWT는 . 을 구분자로 나누어지는 세 가지 문자열의 조합이다.

. 을 기준으로 좌측부터 Header, Payload, Signature를 의미한다.

 

 

1. Header 에는 JWT 에서 사용할 타입과 해시 알고리즘의 종류가 담겨있으며

2.Payload 는 서버에서 첨부한 사용자 권한 정보와 데이터가 담겨있다.

3. 마지막으로 Signature 에는 Header, Payload 를 Base64 URL-safe Encode 를 한 이후 Header 에 명시된 해시함수를 적용하고, 개인키(Private Key)로 서명한 전자서명이 담겨있다.

 

전자서명에는 비대칭 암호화 알고리즘을 사용하므로 암호화를 위한 키와 복호화를 위한 키가 다르다. 암호화(전자서명)에는 개인키를, 복호화(검증)에는 공개키를 사용한다.

 

 

 

강의를 들으면서 코드를 그냥 따라치는 것이 아니라 정확하게 개념을 이해하고 가야지 내것이 된다는 생각이 들었다. 

시간이 걸리더라도 JWT방식에 대해 더 정확하게 이해하고 코드를 작성하려고 노력해야겠다.