Jwt 구조 및 생성

Published: by Creative Commons Licence

JWT

1. JWT란

  • JWT(Json Web Token)
  • 이름에서 알 수 있는 Json으로 된 Token
  • 토큰 자체가 의미를 갖는 Claim 기반 토큰 방식
    • Claim(권한) : 사용자에 대한 프로퍼티나 속성 의미

2. JWT 특징

  • 정보가 담긴 데이터(JSON 객체)를 암호화 하여, HTTP 헤더에 추가 시킨다.=> 보안성 증가
  • 권한을 부여하기 위한 필요 데이터가 JWT 안에 모두 담겨 있다.

하지만 JWT가 보안에 완벽한 것은 아니다. 누군가가 토큰을 탈취한다면, 그 토큰을 이용하여 권한을 수행할 수 있다. 그래서 토큰을 서버에 저장하는 것이 아니기 떄문에 토큰에 유효시간을 설정해야 하며, 탈취 될 가능성을 줄이기 위해 유효시간을 짧게 해 주는것이 좋다.

  • JWT 데이터 무결성 - HMAC
    • 토큰이 탈취 당하더라도 위변조의 위험을 벗어날 수 있도록 무결성을 보장하고자 하는 방법
    • 데이터를 암호화하고, 해싱하는 HMAC 기법을 사용
    • 토큰을 탈취하여 데이터를 수정하게 되면 해싱의 결과가 완전히 달라지게되어 토큰이 위조 되었음을 알 수 있게 된다.
    • 원본 메세지에서 해쉬값을 추출한 후, 이를 비밀 키를 이용하여 복호화 시켜 토큰의 뒤에 붙인다.

3. JWT 구조

1. 헤더(header)

헤더에는 typ과 alg 속성을 명시한다.

  • typ
    • 토큰의 타입 명시
  • alg
    • 해싱 알고리즘 명시
    • 이 알고리즘은 서버에서 토큰을 검증할 때 signature에서 사용한다.

2. 내용(payload)

내용에는 토큰에 대한 정보를 작성한다.

정보는 속성, 값으로 표현되며 이를 claim이라 한다.

  • registered claim
    • 미리 정의된 claim으로써, 토큰에 대한 정보를 작성한다.
    • 토큰에 대한 정보를 담기 위함
    • iss : 토큰 발급자
    • exp : 토큰 만료 시간
    • sub : 토큰 제목
    • aud : 토큰 대상자
  • public claim
    • 공개적인 claim 명시
  • private claim
    • 서버와 클라이언트가 협의한 claim을 명시

3. 서명(Signature)

서명에는 헤더, 내용의 인코딩값을 "."으로 연결하여 합친 후 비밀키로 해싱한다.

4. JWT 장점과 단점

장점

  • 별도의 인증 저장소가 필요 없다.
    • 분산 마이크로 서비스 환경에서 중앙 집중식 인증 서버와 데이터베이스에 의존하지 않는 쉬운 인증 및 안가 방법을 제공하다.
  • 디버깅 및 관리가 용이
  • 트래픽에 대한 부담이 낮음
  • Rest 서비스로 제공 가능
  • 수평 스케일 유리

단점

  • 토큰은 클라이언트에 저장되어 사용자 정보를 조작하더라도 토큰에 직접 적용할 수 없다.
  • 더 많은 필드가 추가되면 토큰의 크기가 커진다.

출처