JWT

박성운·2022년 8월 24일
0

JSON Web Token
JWT는 전자 서명된 URL-safe의 JSON이다.
전자 서명은 JSON의 변조를 체크 할 수 있게 되어 있다.
JWT는 속성 정보를 JSON 데이터 구조로 표현한 토큰으로 RFC7519 표준 압니다.
JWT는 서버와 클라이언트 간 정보를 주고 받을 때 Http 리퀘스트 헤더에 JSON 토큰을 넣은 후 서버는 별도의 인증 솨정없이 헤더 포함되어 있는 JWT 정보르 토해 인증한다.
이때 사용되는 JSON 데이터는 URL-safe 하도록 URL에 포함할 수 있는 문자만으로 만든다.

JWT 토큰 구성
JWT는 세 파트로 아우어지며, 각 파트는 점로 구분하여 xxxxx.yyyyy.zzzz 이런시긍로 표현되낟. 순서대로 header, payload,signature로 구성된다.
Header는 토크의 타입과 해기 암호화 알고리즘으로 구서오디어 있습니다. 첫째는 토큰의 유형 (JWT)을 나타내고 두번째는 HMAC,SHA256, 또는 RSA와 같은 해시 알고리즘을 나타내는 부분이다.
Payload는 토큰에 담을 클레임 정보를 포함하고 있습니다. Payload에 담은 정보의 한 조각을 클레임 이라고 부르고, 이는 name/value 의 한쌍으로 이뤄져있습니다. 토큰에는 여러개의 클레임 들을 넣을 수 잇다. 클레임의 정보는 registerd,punlic, private 클레임으로 세종류가 있다.
마지막으로 Signature은 secret key를 포함하여 암호화되어 있다.

기존의 인증/인가 반식과 다른점

서버 기반 인증 기존의 인증 시스템에서는 서버측에서 유저들의 정보를 세션에 기억하고 잇어야 한다. 이 세션을 유지하기 위해서는 여러가지 방법이 사용되는데 메모리/티스크데이텁베이스 시스템에 이를 담곤 한다. 서버 기반 인증 시스템의 흐름은 다음과 같다.

토큰 기반 시스템은 statless한다. 유저의 인정정보를 서버나 세션에 담아주지 않기 때문에 인정정보를 서버에 담아둠으로써 발생하는 문제점들이 해소된다.

JWT 장점
-무상태(stateless), 확장성이 있다. 기존 서버에 세션을 저장 하는 바식에서 서버 여러대를 사요하여 요청을 분산하였다면 어떤 유저가 로그인 했을때 그 유저는 처음 로그인한 서버에만 요청을 내보내도록 설정해야한다. 한지만 토큰을 사용하면 토큰 값만 알고 있다면 어떤 서버로 요청이 들어가던 상관이 없다.
-보안성 쿠키르 전달하지 않아도 되므로 쿠키를 사용함으로써 발생하는 취약점이 사라진다.
-여러 플랫폼 및 도메인 어프리케이션 규모가 커지면 여러 디바이슬ㄹ 호환 시키고 더많은 종류읭 서비슬ㄹ 제공한다. 토큰을 사용한다면 그어떤 디바이스에서도 토큰만 유효하다면 요청이 정상적으로 처리된다.

하지만 단점은 claim에 넣는 데이터가 많을 수로 JWt 토큰이 길어진다. 그리고 JWT에 넣는 Payload는 암호화 되지 않는다. 단순히 BASE64로 인코딩만 하기 때문에 중간에 패킷을 가로채거난 기타 방법으로 토큰을 취득했으면 디코딩을 통해 데이터를 볼 수 있다. 그래서 중요한 데이터르 Payload에 넣지 말아야 한다.

0개의 댓글