JWT - JSON Web Token

JJStone·2021년 8월 9일
0

JWT 설정

목록 보기
1/1

1. JWT를 왜 써야하는가?

  • 기존의 Web Session 방식의 단점
    • 다른 도메인간에 공유될 수 없다.
    • 서버의 확장성이 낮다.
  • JWT의 장점
    • 세션에 비해 별도의 저장소가 필요 없다. 즉, 확장성이 높다.
    • 다른 도메인간에 공유될 수 있다.
  • JWT의 단점
    • 이미 발급된 JWT를 돌이킬 수 없다.

2.JWT의 구성 요소

  • 구성 : (Header).(payload).(signature)
  • Header (헤더): typalg를 키로 가지고 있음
{
  	"typ" : "JWT", // 토큰의 타입 지정 
  	"alg" : "HS256" // 해싱 알고리짐 지정. RSA혹은 SHA256 사용
}
  • payload (정보): 토큰에 담을 정보. 정보의 한 조각Claim(클레임) 이라고 부르고 이는 JSON 형태의 key : value 형식으로 이루어져 있음.
    • 클레임의 종류 : registered, public, private
    • Registered claim (등록된 클레임): 토큰에 대한 정보들을 감기 위해 이미 이름이 정해진 클레임들. 이 클레임들의 사용은 Optional이며, 클레임이름들은 다음과 같다.
      1. iss: 토큰 발급자 (issuer)
      2. sub: 토큰 제목 (subject)
      3. aud: 토큰 대상자 (audience)
      4. exp: 토큰의 만료 시간 (expiration). NumbericDate 형식으로 되어있어야 한다. 또한 현재 시간보다 이후로 설정되어있어야한다.
      5. nbf : Not Before를 의미. 토큰의 활성 날짜. Numberic Date 형식으로 날짜를 지정하고, 이 날짜가 지나기 전까지는 토큰이 처리되지 않음.
      6. iat : 토큰이 발급된 시간 (issued at). 이 값을 사용하여 토큰의 age가 얼마나 되었는지 판단.
      7. jti : JWT의 고유 식별자. 주로 중복적인 처리를 방지하기 위해 사용.
    • public Claim (공개 클레임): 공개 클레임들은 충돌이 방지된 이름을 가지고있어야 하며, 이를 위해 클레임 이름을 URI 형식으로 짓ㅅ는다.
    • private Claim (비공개 클레임): 클라이언트, 서버 상호 협의하에 사용되는 클레임. 공개 클레임과는 달리 이름이 중복되어 충돌될 수 있으니 사용에 유의.
  • payload 예제 출처 (https://velopert.com/2389)
{
    "iss": "velopert.com",
    "exp": "1485270000000",
    "https://velopert.com/jwt_claims/is_admin": true,
    "userId": "11028373727102",
    "username": "velopert"
}
  • Signature (서명) : 헤더와 정보의 인코딩 값 (base64)를 합친 후 비밀키로 해시화 하여 사용.
profile
java, scala 개발자 입니다.

0개의 댓글