[Web] JWT

JWT (Json Web Token)

  • JSON 포맷을 이용하여 사용자에 대한 정보를 저장하는 Claim 기반 Web Token
  • 토큰 자체를 정보로 이용하는 Self-Contained 방식
  • JWT 를 포함해 요청을 보내면 서버는 허가된 JWT 인지 검사

JWT

JWT 구조

  • Header, Payload, Signature 세 부분으로 이루어짐
    • Header: 위 세 가지 정보를 암호화할 방식(alg), 타입 등이 들어감
    • Payload: 서버에서 보낼 데이터가 들어감. 유저 고유 ID 값, 유효기간 등
    • Verify Signature: base64 방식으로 인코딩한 header, payload 그리고 secret key 를 더한 후 서명
  • Header, Payload 는 인코딩될뿐 암호화되지 않아서 누구나 볼 수 있음
  • 하지만, Verify Signature 는 Secret Key 를 가지고 있는 서버만 복호화 가능(조작이 불가능)
  • JSON 형태인 각 부분은 base64로 인코딩되어 .를 구분자로 사용하여 표현

JWT 구조

생성된 토큰은 HTTP 통신 시 Authroization 이라는 key 의 value 로 사용됨

{
    "Authorization": "Bearer {생성된 토큰 값}",
}

JWT 인증 과정

JWT 인증

  1. 사용자가 로그인
  2. 서버에서는 계정정보를 읽어 사용자를 확인 후, 사용자의 고유한 ID값을 부여한 후, 기타 정보와 함께 Payload에 담음
  3. JWT 토큰의 유효기간을 설정
  4. 암호화할 SECRET KEY를 이용해 ACCESS TOKEN을 발급
  5. 사용자는 Access Token을 받아 저장한 후, 인증이 필요한 요청마다 토큰을 헤더에 실어 보냄
  6. 서버에서는 해당 토큰의 Verify Signature를 SECRET KEY로 복호화한 후, 조작 여부, 유효기간을 확인
  7. 검증이 완료된다면, Payload를 디코딩하여 사용자의 ID에 맞는 데이터를 응답

참고


© 2021. All rights reserved.

Powered by Hydejack v9.1.4