JWT 토큰

pixelstudio·2021년 3월 8일
0

JSON Web Token(JWT)은 웹표준(RFC7519)으로서 두 개체에서 JSON객체를 사용하여 가볍고 자가수용적인(self-contained)방식으로 정보를 안전성 있게 전달해준다.

JWT는 어떤 상황에서 사용될까?
회원 인증
정보 교류

JWT 구조

1.헤더(Header)

typ: 토큰의 타입을 지정한다. ex) 'typ': 'JWT'
alg: 해싱 알고리즘을 지정한다. 해싱 알고리즘은 보통 HMAC SHA256, RSA가 사용되며, 이 알고리즘은, 토큰을 검증 할 때 사용되는 signature부분에서 사용된다.

{
  "typ": "JWT"
  "alg": "HS256"
} 
  1. 정보(Payload)
    Payload에는 정보가 담겨있다. 여기에 담는 정보는 키/값 쌍으로 이루어진 하나의 조각은 클레임(Claim)이라고 부른다. 페이로드에는 어떤 정보에 접근 가능한지에 대한 권한을 담을 수도 있고, 사용자의 유저이름 등 필요한 데이터는 이곳에 담아 암호화 시킨다. 하지만 민감한 정보는 되도록 담지 않는 것이 좋다.

클레임(Claim)의 3종류
등록된(registered) 클레임
공개(public) 클레임
비공개(private) 클레임

등록된 클레임

iss (Issure, 토큰 발급자)
sub (Subject, 토큰 제목)
aud (Audience, 토큰 대상자)
exp (Expiraton Time, 토큰 만료시간)
nbf (Not Before, 토큰 활성될 날짜)
iat (Issued At, 토큰 발급된 시간)
jti (JWT ID, 중복 방지를 위한 고유 식별자)

공개 클레임
공개 클레임은 JWT를 사용하는 사람들이 마음대로 정의 할 수 있지만, 충돌을 방지하기 위해서는 URI형식으로 작성해야한다.

{
 "https://example.com/jwt_claims/is_mine": true
}
  1. 서명(Signature)
    서명은 헤더의 인코딩 값과, 정보의 인코딩 값을 합친 후 주어진 비밀키로 해슁하여 생성한다.
HMACSHA256(
 base64UrlEncode(header) + "." +
 base64UrlEncode(payload),
 secret)
profile
프론트엔드 개발자를 목표로 학습하며 스스로 디벨롭중입니다. 추후엔 백엔드를 제대로 학습할 예정입니다.

관심 있을 만한 포스트

0개의 댓글