JWT Access Token , Refresh Token

박슬빈·2022년 5월 18일
0

웹 백엔드

목록 보기
1/1

🖥 JWT란 (Json Web Token)

Json 포맷을 이용하여 사용자에 대한 속성을 저장하는 Claim기반 WebToken
인증에 필요한 정보들을 암호화시킨 토큰 이다.
JWT 기반 인증은 JWT Token ( Access Token) 을 HTTP 헤더에 실어 서버가 클라이언트를 식별하는 방식이다.

서버 기반 인증 시스템

서버의 세션을 사용하여 사용자 인증을 하는 방식 ( 데이터베이스나 램 ) 에서 사용자의 인증정보를 관리
클라이언트의 상태를 계쏙 유지해놓고 사용하므로 사용자가 증가함에 따라 성능문제가 일어날 수 있다.

토큰 기반 인증 시스템

인증받은 사용자에게 토큰을 발급 , 로그인이 필요한 작업일 경우에는 헤더에 토큰을 같이 보내 인증받은 사용자인지 확인을 한다.
서버 기반 인증 시스템과는 다르게 상태를 유지하지 않으므로 Stateless한 특징이 있다.

JWT 구조

XXXXXX.YYYYYY.ZZZZZZ
Header , Payload , Signature

알고리즘 형식

{
 "alg" : "HS256",
 "typ" : "JWT" 
}

📺 alg : 서명 암호화 알고리즘
📺 typ : 토큰 유형

Payload

토큰에서 사용할 정보의 조각들인 Claim이 담겨있음

{
	"name" : "slbin",
    "age" : "25"
}
Key-value 형식으로 이루어진 한 쌍의 정보를 Claim이라고 칭한다.

페이로드에는
Registed Claims
Public claims
Private claims
세 가지로 나누어짐

Registed claims : 미리 정의된 클레임

iss(issuer 발행자)
exp(expireation time 만료 시간)
sub(subject 제목)
iat(issued At 발행 시간)
jti(JWI ID)
등이 있고 필수는 아니다.

Public claims : 사용자가 정의할 수 있는 클레임

공개용 정보 전달을 위해 사용이 된다.

private claims : 당사자들 간에 정보를 공유하기 위한 클레임

외부에 공개되도 상관이 없지만 해당 유저를 특정할 수 있는 정보들을 담는다.

Signature

헤더의 인코딩 값과 정보의 인코딩 값을 합친 후 비밀키로 해쉬를 하여 생성

JWT를 이용한 인증과정

1)

사용자가 로그인 인증을 요청

2)

서버에서 Header , Payload , Signature를 정의 한다
암호화를 하여 JWT를 생성하고 클라이언트에게 발급을 한다.

3)

클라이언트는 서버로부터 받은 JWT 로컬스토리지에 저장
API를 요청할때 헤더에 토큰을 담아서 보낸다.

4)

서버에서 발행한 토큰이랑 일치하면 인증을 해준다.
인증이 통과되었으면 페이로드에 들어있는 유저의 정보들을 클라이언트에 돌려준다.

5)

액세스 토큰의 시간이 만료되었으면 클라이언트는 리프래시 토큰을 이용해서 서버로 부터 새로운 액세스 토큰을 발급 받는다.

Access Token , Refresh Token

실질적으로 로그인이 필요한 기능을 사용할때는 Access Token을 헤더에 담아서 보내고
Access Token을 발급 받기위한 토큰이 Refresh Token 이다.

마무리

Access Token만을 사용했었는데 Refresh Token까지 사용하려니 어지럽다.

profile
이것저것합니다

0개의 댓글