[JSON Web Token]

Han Gyul Kang·2022년 5월 30일
0

개발노트_2022

목록 보기
2/3

JWT Summary

서명 된 토큰은 그 안에 포함 된 클레임의 무결성을 확인할 수 있다.

Session을 사용하지 않고 Token을 사용하기 때문에 어느 서버를 들어가든
Secret key만 알고있으면 검증절차를 통해 접근이 가능하다.

JWT 토큰은 아무곳에서나 만들 수 없고 오직 서버에서만 만들 수 있다.
세션이 담던 정보를 JWT 페이로드에 담을 수 있기 때문에 토큰 하나로 해결되는 부분이 다양하게 많다.

Hash : 단방향 암호화로 암호를 잊어버리게 되면 비밀번호 초기화를 해야한다.
Base64 : 양방향 암호화로 암/복호화가 가능하다.

JWT의 기본 구조

예) xxxxx.yyyyy.zzzzz
구현) Header.Payload.Signiture

Header
사용한 알고리즘, 토큰 타입을 담음

Payload(=데이터 저장소로 생각해도 됨)
보편적으로 비공개 클레임(개인 클레임, 즉 유저아이디같은 변경되지 않는 비공개 값)을 담음

Signiture(서명)
서버 키 값, 헤더에 지정한 알고리즘으로 암호화 한 Header + Payload

JWT Flow : HS256

로그인

  1. 클라이언트
  2. 로그인 시도
  3. 서버 : 헤더, 페이로드, 시그니쳐 정보를 만듦
    Header : 서명 알고리즘 정보(HS256)
    Payload : {userId : AJKB35JBK10492JSAP..}
    Signiture : HMAC으로 암호화 한 Header + Payload + SecretKey(서버 비밀 키)

암호화 시 header에 지정한 알고리즘 방식으로 암호화해야 한다.

  1. Header, Payload, Signiture를 각각 base64로 암호화를 한다.
    여기서 사용하는 base64는 암/복호화가 가능하기 때문에 단순 서명이 목적이다.
  2. 암호화 완료한 값을 클라이언트로 다시 돌려준다.
  3. 웹 브라우저의 경우 로컬스토리지같은 곳에 보관한다.

서버 접근

  1. 클라이언트
  2. 로컬스토리지에 담긴 JWT 토큰과 함께 서버 접속 시도
  3. 서버는 유효한 JWT 토큰인지 검증한다.
  4. 서버는 header + payload + 시크릿키를 HS256으로 암호화를 진행 후 비교
  5. payload에 담긴 비공개 클레임 데이터로 조회 등 작업을 진행할 수 있다.



JWT Flow : RSA

로그인

구조 : Header.Payload.Signiture

Header : RSA
Payload : {userId : AJKB35JBK10492JSAP..}
Signiture : RSA private key로 암호화(Header + Payload)


서버 접근

RSA private key로 암호화 된 Signiture를 풀어서 검증만 하면 됨

profile
피아노 치는 개발자

0개의 댓글