JWT(JSON Web Token)란
인증에 필요한 정보들을 암호화시킨 JSON 토큰을 의미한다.
그리고 JWT 기반 인증은 JWT 토큰(Access Token)을 HTTP 헤더에 실어 서버가 클라이언트를 식별하는 방식이다.
JWT는 JSON 데이터를 Base64 URL-safe Encode 를 통해 인코딩하여 직렬화한 것이며, 토큰 내부에는 위변조 방지를 위해 개인키를 통한 전자서명도 들어있다.
따라서 사용자가 JWT 를 서버로 전송하면 서버는 서명을 검증하는 과정을 거치게 되며 검증이 완료되면 요청한 응답을 돌려준다.
JWT 구조
JWT는 dot(.)을 구분자로 3파트로 구분되어 있으며 각각의 파트를 Header, Payload, Signature를 의미한다.
Header
: 토큰의 타입과 해시 암호화 알고리즘으로 구성되어 있다. 첫번째는 토큰의 유형을 나타내고 두번째는 HMAC,SHA256또는 RSA와 같은 해시 알고리즘을 나타낸다.
Header는 typ와 alg 두 정보로 구성되는데, 여기서 alg는 Signature를 해싱하기 위한 알고리즘을 의미한다.
- typ: 토큰의 타입 지정 (ex:JWT)
- alg: 알고리즘 방식을 지정하며, Signature와 토큰 검증에 사용한다.
{
"alg": "HS256",
"typ": JWT
}
Payload
: 토큰에 담을 Claim정보를 포함하고 있으며, Payload에 담는 정보의 함 조각을 Claim이라 부르고 이는 key/value pair로 이루어져 있다. 여러 조각(Claim)을 넣을 수 있다.
Claim은 Registered Claim, Public Claim, Pricate Claim 세종류가 있다.
- Registed claim : 토큰 정보를 표현하기 위해 이미 정해진 종류의 데이터들.
- iss(issuer; 발행자)
- aud(audience;대상자)
- sub(subject; 제목)
- exp(expireation time; 만료 시간),NumericData 형식
- nbf(not before; 토큰활성일), 이 날이 지나기 전의 토큰은 활성화 x
- iat(issued At; 발행 시간): 토큰 발급 이후의 경과 시간을 알 수 있음
- jti(JWI ID; 토큰 식별자): 중복 방지를 위해 상용하며 일회용 토큰(Access Token)등에 사용된다.
- iss(issuer; 발행자)
- Public claim : 사용자 정의 Claim, 공개용 정보를 위해 사용된다. 충돌 방지를 위해 URI 포맷을 이용한다.
{
"https://yoondii.tistory.com": true
}
- Private claim : 해당하는 당사자들 간에 정보를 공유하기 위해 만들어진 사용자 지정 클레임. 외부에 공개되도 상관없지만 해당 유저를 특정할 수 있는 정보들을 담는다.
{
"token_type": access
}
Signature
: secret key를 포함하여 암호화되어 있다.
장/단점
장점
- 토큰 자체에 인증에 필요한 정보가 모두 있기에 별도의 인증 저장소가 필요없다.
- 별도의 사용자 정보를 요청할 필요가 없기에 데이터 요청이 좀 더 가벼워 질 수 있다.
- XML보다 덜 장황해서 인코딩 시 크기도 작아져 SAML보다 컴팩트하다.
- 분산/클라우드 기반 infra-strucure에 대응하기 쉽다.
- URL 파라미터와 헤더로 사용하낟.
- 수평 스케일이 쉽다.
- 트래칙에 대한 부담이 적다.
- 내장된 만료가 존재한다.
- REST 서비스 제공이 가능하다.
단점
- 저장 할 필드 수에 따라 토큰이 커질 수 있다.
- 토큰이 클라이언트에 저장되어 데이터베이스에서 사용자 정보를 조작해도 코튼에 직접 적용할 수 없다.
- stateless앱 환경에서는 토큰이 대부분의 요청에 전송되기에 트래픽 크기에 영향을 줄 수 있다.
출처-위키백과,https://catsbi.oopy.io/ , 알팍한코딩사전-세션 VS. 토큰! JWT가 뭔가요?
'1일1CS' 카테고리의 다른 글
31. 컴파일러란? (0) | 2023.01.06 |
---|---|
30. 세션 기반 인증과 토큰(JWT) 기반 인증의 차이 (0) | 2023.01.06 |
28. GPU란 (0) | 2023.01.05 |
27. IPv4 와 IPv6 (0) | 2023.01.05 |
26. 도메인(domain)이란? (0) | 2023.01.04 |
댓글