JWT

gusdas·2022년 3월 23일
0

용어 정리

목록 보기
13/28

JWT 왜 사용할까?

JWT 이전에 웹 환경에서는 쿠키와 세션으로 인증을 했는데요.
이 두개의 사용은 Statefull 하기에 HTTP의 Stateless 프로토콜을 위반하죠

그런 고민으로 만들어진게 JWT입니다.

JWT란?

JWT는 개인 키와 공개키 쌍으로 서명한 토큰입니다.
토큰에 서명한다는게 개인 키를 보유한 서버가 서명된 토큰이 정상적인지 인증 할 수 있다는 이야기입니다.

서명은 비밀키로 데이터를 암호화하면 공개 키를 가진 아무나 데이터가 맞는지 검증 할 수 있다.

JWT 작동방식

JWT는 점(.)으로 구분되고 xxxxx.yyyyy.zzzzz같이 보입니다.

JWT를 디코딩하면 헤더와 페이로드 그리고 서명을 얻을 수 있습니다.

클라이언트가 로그인시 JWT 토큰을 서버가 발급해주면 그 이후의 요청에 대해서는 해당 토큰으로 인증하고 응답해주게 됩니다.

헤더

보통 토큰의 타입이나 서명 알고리즘에 대해 저장합니다.

페이로드

민감한 정보를 담지 않고 표준 스펙이 정의 되어있는데 기본 7가지를 사용하고 이 7가지를 다 사용하지 않아도 됩니다.

더 자세한 내용은 이곳에서 확인 해보세요

iss(Issuer): 토큰 발급자

sub(Subject): 토큰 제목(토큰에서 사용자에 대한 식별 값)

aud(Audience): 토큰 대상자

exp(Expiration Time): 토큰 만료 시간

nbf(Not Before): 토큰 활성 날짜(이 날짜 이전의 토큰은 활성화 되지 않음)

iat(Issued At): 토큰 발급시간

jti(JWT Id): JWT 토큰 식별자(issuer가 여러명일때)

서명

가장 중요하고 핵심인 서명은 암호화되어 있어서 내용을 알 수 없습니다.
이를 인증하는지 설명하자면
우선 JWT 토큰을 클라이언트가 서버로 요청과 동시에 전달을 하고
서버가 가지고 있는 개인키를 가지고 서명을 복호화 한 다음 복호화한 header가 JWT의 header값과 일치하고 payload도 일치하는지 확인하고 일치한다면 인증을 허용합니다.

profile
웹개발자가 되자

0개의 댓글