관리 메뉴

개발그래머

Json Web Token(JWT) 본문

Spring/Spring Security

Json Web Token(JWT)

임요환 2023. 3. 17. 11:16

JWT(Json Web Token)

당사자 간에 정보를 JSON 개체로 안전하게 전송하기 위한 간결하고 독립적인 방법을 정의하는 개방형 표준(RFC 7519) 이 정보는 디지털 서명되어 있으므로 확인하고 신뢰 가능 JWT는 secret 또는 RSA 또는 ECDSA를 사용하는 공개/개인 키 쌍을 사용하여 서명 가능 JWT는 암호화하여 당사자 간에 비밀성을 제공

JWT 사용 이유

  • 권한 부여 : 가장 일반적인 방법, 사용자가 로그인하면 이후에 각 요청에 JWT가 포함되어 사용자가 해당 토큰에 허용된 경로, 서비스 및 리소스에 접근 가능
  • 정보 교환 : 당사자 간에 정보를 안전하게 전송 가능
  • JWT는 크기가 작아 HTML 및 HTTP 환경에서 전달하기 좋음 공개/개인 키 방식 사용 가능 JSON 파서는 개체에 직접 매핑되기 때문에 프로그래밍언어에 일반적임

JWT 구조

  • (.)으로 구분된 세 부분으로 구성
  1. header
  2. payload
  3. signature
xxxxxxx.yyyyyyyy.zzzzzzzz

Header

  • 토큰유형과 사용중인 서명 알고리즘으로 구성 { "alg" : "HS256", "typ" : "JWT" }

Payload

  • 3개의 클레임으로 구성
  • registerd claims : iss, exp, sub, aud
  • public claims
  • private claims
  • 서명된 토큰의 경우 이정보는 변조로부터 보호되지만 누구나 읽을 수 있으므로 암호화되지 않은 경우 JWT의 페이로드 또는 헤더에 중요한 정보 입력 X

Signature

  • 서명 부분을 생성하기 위해 인코딩된 헤더, 인코딩 된 페이로드, secret, 헤더에 지정된 알고리즘을 가져와 서명

JWT의 사용

  • 사용자 인증 성공시 JWT 반환
  • 보안이 좋지 않으므로 민감한 세션데이터를 저장하면 안 됨
  • Bearer 스키마를 사용해서 Authorization 헤더에 JWT를 보냄
  • 토큰이 너무 커지지 않도록 주의 필요

JWT의 장점

  • JWT의 가장 큰 장점은 self descriptionable 하다는 것임
  • 토큰 자체로 인증을 증명하여 굳이 데이터베이스 조회, session 조회 없이 인증이 가능함
  • JWT secret 알고리즘 = HMAC 512 사용(SHA 512를 해시함수로 구현, 데이터 무결성 검증)
  • 인증 상태를 서버에 저장하지 않아 메모리 사용에 효율적임
  • 필수정보를 스스로 가지고 있어 DB 조회가 필요하지 않음

JOSE

  • JOSE(Json Object Signing and Encryption) : 당사자간 claim을 안전하게 전송하기 위한 프레임워크
  • 무결성 = 완전성, 정확성, 일관성
  • JWS와 JWE를 사용하여 보안성을 올림
  • JWS를 통해 무결성을 올림
  • JWE를 통해 claim을 암호화하여 기밀성을 올림
  • JWT는 JWS + JWE를 나타내는 하나의 방법임