[작성중]JWT(JSON Web Token)가 뭐야?

[작성중]JWT(JSON Web Token)가 뭐야?

Intro: Base64 URL-Safe

인코딩

코드화, 암호화, 부호화

컴퓨터가 이해할 수 있는 형식으로 바꾸어주는 것

Base64 URL-Safe

인코딩 방식 중 하나

이메일 사용을 위한 인터넷 표준 포맷인 MIME를 사용하기 위해 사용되는 Base64 인코딩 방식 중에서 62, 63번 문자인 +, /를 웹으로 전송했을 때 정상적으로 전송하지 않는 문제가 발생한다. 이러한 오류를 막기 위해서 62, 63번 문자를 -(minus), _(underline)으로 변경한 것이 바로 Base64 URL-Safe이다.

JWT

1. JWT란?

JWT

JSON Web Token의 약자

클라이언트와 서버, 서비스와 서비스와 같이 두 개체 사이에서 통신 시 권한 인가(Authorization)를 위해 사용하는 토큰

웹표준 ( RFC 7519)

RFC 7519) Base64 URL-Safe 인코딩된 문자열인 JSON 객체를 사용하여 정보를 안전성있게 전달해준다.

JWT의 특징

C, Java, Python, C++, R, C#, PHP, JavaScript, Ruby, Go, Swift 등 대부분의 주류 프로그래밍 언어에서 지원된다.

URL에 대해 안전한 문자열로 구성되어 있기 때문에 HTTP 어디든 위치할 수 있으므로 쉽게 전달될 수 있다. 웹 서버의 경우, HTTP의의 헤더에 넣어서, 혹은 URL의 파라미터로 전달할 수 있다.

어떤 상황에서 사용될까?

회원 인증 (토큰)

JWT를 사용하는 가장 흔한 시나리오. 유저가 로그인을 하면, 서버는 유저의 정보에 기반한 토큰을 발급하여 유저에게 전달한다. 그 후 유저가 서버에 요청할 때마다 JWT를 포함하여 전달 한다. 서버가 클라이언트에게서 요청을 받을 때마다 해당 토큰이 유효하고 인증됐는지 검증하고(verify), 유저가 요청한 작업에 권한이 있는지 확인하여 작업을 처리한다.

한다. 서버가 클라이언트에게서 요청을 받을 때마다 해당 토큰이 유효하고 인증됐는지 검증하고(verify), 유저가 요청한 작업에 권한이 있는지 확인하여 작업을 처리한다. 서버측에서는 유저의 세션을 유지할 필요가 없다. 즉, 유저가 로그인이 되어있는지 아닌지 신경 쓸 필요가 없고, 유저가 요청을 했을 때마다 토큰만 확인 하면 된다. 따라서 세션 관리가 필요없으므로 서버 자원을 많이 아낄 수 있다.

하면 된다. 따라서 세션 관리가 필요없으므로 서버 자원을 많이 아낄 수 있다. JWT 토큰을 만들 때에는 JWT를 담당하는 라이브러리가 자동으로 인코딩 및 해싱작업을 해준다.

정보 교류

JWT는 두 개체 사이에서 안정성있게 정보를 교환하기에 좋은 방법이다. 왜냐하면 정보가 sign이 되어 있기 때문 에 정보를 보낸이가 바뀌진 않았는지, 또 정보가 도중에 조작되지는 않았는지 검증할 수 있다.

1-2. JWT의 구조

HEADER.PAYLOAD.SIGNATURE

점(.)을 구분자로 헤더(Header), 페이로드(Payload), 서명(Signature) 세 가지 문자열로 되어 있다.

헤더(Header)

페이로드(Payload)

서명(Signature)

참고 자료

jwt 공식 홈페이지: https://jwt.io/

jwt: https://velopert.com/2389

from http://nno3onn.tistory.com/540 by ccl(A) rewrite - 2021-09-03 17:26:09