JWT

Seunghwa's Devlog·2021년 2월 25일
0

JWT란?

Json Web Token - 두 개체에서 JSON 객체를 사용하여 가볍고 self-contained 방식으로 정보를 안정성 있게 전달

self - contained : jwt는 필요한 모든 정보를 자체적으로 지니고있디다. 시스템에서 발급된 토큰은 토큰에 대한 기본 정보, 전달 할 정보, 토큰이 검증됐다는 것을 증명해주는 signature포함

서버의 경우 HTTP의 헤더에 넣어서 전달 할 수도 있고, URL 의 파라미터로 전달 할 수도 있다.

사용하는 상황

  • 회원 인증: JWT 를 사용하는 가장 흔한 시나리오 입니다. 유저가 로그인을 하면, 서버는 유저의 정보에 기반한 토큰을 발급하여 유저에게 전달해줍니다. 그 후, 유저가 서버에 요청을 할 때 마다 JWT를 포함하여 전달합니다. 서버가 클라이언트에게서 요청을 받을때 마다, 해당 토큰이 유효하고 인증됐는지 검증을 하고, 유저가 요청한 작업에 권한이 있는지 확인하여 작업을 처리합니다.서버측에서는 유저의 세션을 유지 할 필요가 없습니다. 즉 유저가 로그인되어있는지 안되어있는지 신경 쓸 필요가 없고, 유저가 요청을 했을때 토큰만 확인하면 되니, 세션 관리가 필요 없어서 서버 자원을 많이 아낄 수 있죠.
  • 정보 교류: JWT는 두 개체 사이에서 안정성있게 정보를 교환하기에 좋은 방법입니다. 그 이유는, 정보가 sign 이 되어있기 때문에 정보를 보낸이가 바뀌진 않았는지, 또 정보가 도중에 조작되지는 않았는지 검증할 수 있습니다.

<헤더>
두 가지의 정보를 지님
typ : 토큰의 타입 지정 / alg : 해싱 알고리즘 지정 보통 HMAC SHA256 OR RSA사용 → 토큰을 검증할 때 사용되는 signature부분에서 사용

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

<내용(payload)>
토큰에 담을 정보가 들어있음. 정보의 한 '조각'을 클레임(claim)이라고 부름 이는 name / value 한 쌍으로 이루어짐. 여러개의 클레임을 넣을 수 있음

  • 클레임의 종류

1) 등록된 (registered) 클레임

2) 공개 (public) 클레임

3) 비공개 (private) 클레임

<서명(signature)>

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

수도코드

HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret)

이렇게 만든 해쉬를 base64형태로 나타내면 됨

<참조링크>

https://velopert.com/2389

profile
에러와 부딪히고 새로운 것을 배우며 성장해가는 과정을 기록합니다!

0개의 댓글