반응형
JWT (JSON Web Token)란?
- *JWT (JSON Web Token)**는 인터넷 표준인 RFC 7519에 정의된, JSON 객체를 사용해서 토큰 자체에 정보들을 저장하는 Web 토큰입니다. JWT는 특히 웹사이트와 서버 간의 안전한 정보 교환을 위해 설계되었으며, 매우 간결하고 독립적입니다. 이 특성 덕분에 주로 분산된 시스템 환경에서 인증 및 정보 교환에 널리 사용됩니다.
JWT의 구조
JWT는 세 부분으로 나뉩니다: 헤더(Header), 페이로드(Payload), 서명(Signature). 이 세 부분은 각각 Base64로 인코딩되어 . (점)으로 구분되어 있는 문자열로 표현됩니다.
1. 헤더 (Header)
헤더는 토큰의 타입 (주로 "JWT")과 함께 사용하는 해시 알고리즘 (예: HMAC SHA256 또는 RSA)이 포함되어 있습니다.
예를 들어:
jsonCopy code
{
"alg": "HS256",
"typ": "JWT"
}
- alg: 서명 및/또는 토큰 검증에 사용되는 암호화 알고리즘을 지정합니다.
- typ: 토큰의 타입을 지정하며, JWT로 설정됩니다.
2. 페이로드 (Payload)
페이로드는 토큰에 담을 정보의 조각들인 **클레임(claims)**을 포함하고 있습니다. 클레임은 세 가지 유형이 있습니다: 등록된 (registered), 공개 (public), 비공개 (private) 클레임.
- 등록된 클레임: 서비스에서 필요한 정보를 제공하기 위해 예약된 클레임으로, 모든 클레임은 선택적이지만, 자주 사용되는 클레임들은 다음과 같습니다.
- iss (issuer): 토큰 발행자
- sub (subject): 토큰 제목
- aud (audience): 토큰 대상자
- exp (expiration time): 토큰의 만료 시간
- nbf (not before): 토큰의 시작 시간
- iat (issued at): 토큰이 발행된 시간
- jti (JWT ID): JWT의 고유 식별자
- 공개 클레임: 충돌이 방지된 이름을 가지며, 보통 URI 형식으로 이름이 지정됩니다.
- 비공개 클레임: 클라이언트와 서버 간의 합의 하에 사용되고 정의된 맞춤 클레임으로, 양측이 동의한 정보를 저장하기 위해 사용됩니다.
예를 들어:
jsonCopy code
{
"sub": "1234567890",
"name": "John Doe",
"admin": true,
"iat": 1516239022
}
3. 서명 (Signature)
서명은 헤더의 인코딩된 값과 페이로드의 인코딩된 값을 합친 후 주어진 비밀 키로 해시하여 생성합니다.
예를 들어, HMAC SHA256 알고리즘을 사용하는 경우:
javascriptCopy code
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret
)
JWT의 사용 방식
- 인증 (Authentication): 가장 흔한 JWT 사용 사례입니다. 사용자가 로그인하면, 서버는 사용자의 정보를 기반으로 JWT를 생성하고 반환합니다. 이후 사용자는 해당 토큰을 사용하여 서버에 요청을 보낼 때마다 인증을 받게 됩니다.
- 정보 교환 (Information Exchange): JWT는 두 개체 사이에서 안전하게 정보를 교환하기 위해 사용됩니다. JWT는 정보가 수정되지 않았음을 검증할 수 있는 서명이 포함되어 있습니다.
장점과 단점
장점
- 자가 포함 (Self-contained): JWT는 필요한 모든 정보를 자체적으로 포함합니다. 따라서 별도의 저장소에 접근할 필요 없이 토큰만으로 필요한 정보를 얻을 수 있습니다.
- 확장성 (Scalability): 세션을 저장할 필요가 없기 때문에 서버 자원을 아낄 수 있어 확장성 있는 인증 방식을 구현할 수 있습니다.
- 모바일 앱 지원 및 CORS: 모바일 애플리케이션과 다양한 도메인 간 통신에서 쿠키보다 효과적입니다.
단점
- 토큰 크기: JWT는 상대적으로 큰 크기를 가질 수 있어, HTTP 헤더에 사용될 때 네트워크 비용이 증가할 수 있습니다.
- 토큰 만료 처리: JWT는 기본적으로 서버에서 만료를 변경할 수 없으므로, 만료되기 전까지는 클라이언트에서 계속 사용할 수 있습니다. 이를 위한 적절한 전략이 필요합니다.
- 보안 주의: 비밀 키가 유출되면 토큰이 위조될 수 있으므로 보안 관리가 중요합니다.
JWT는 이러한 특성으로 인해 RESTful API를 중심으로 현대 웹 애플리케이션에서 인증 및 권한 부여에 널리 사용되고 있습니다.
반응형
'Data Analysis > Computer Science' 카테고리의 다른 글
jar 파일 (0) | 2024.08.07 |
---|---|
동적으로 쿼리를 생성한다는 것 / 동적할당 정적할당 (0) | 2024.04.23 |
GIT 명령어 정리 (1) | 2023.05.09 |
FTP / SFTP(SSH파일전송프로토콜)/ FTPS / SMTP / TCP/IP & FileZilla (0) | 2023.05.09 |
Docker (0) | 2023.04.21 |
댓글