JWT(JSON Web Tokens)란?
- 두 개체에서 JSON 객체를 사용하여 가볍고 정보를 안전성 있게 전달하는 방식
JWT의 구성 요소
- Header
- Payload(Claim)
- Signature
Header
{
"alg": "HS256", // 사용된 해싱 알고리즘
"typ": "JWT" // 토큰의 유형
}
Payload(Claim)
{
"sub": "1234567890", // subject, 토큰의 주제 (일반적으로 사용자 ID)
"name": "John Doe", // 사용자 이름
"admin": true, // 관리자 여부
"iat": 1516239022 // 토큰 발급 시간 (issued at)
}
-> Payload(Claim)은 주로 세 가지 종류의 클레임으로 나뉜다.
Registered Claims (등록된 클레임):
- 토큰에 대한 정보를 나타냅니다. 이는 표준화된 클레임으로, 일반적인 정보를 제공합니다.
- sub: 토큰의 주제 (일반적으로 사용자 ID)
- iss: 토큰을 발급한 발급자 (issuer)
- iat: 토큰 발급 시간 (issued at)
- exp: 토큰의 만료 시간
Public Claims (공개 클레임):
- 충돌을 방지하기 위해 사용자 정의할 수 있는 클레임입니다. 서비스 간에 협의된 정보를 담을 수 있습니다.
- name: 사용자 이름
- admin: 관리자 여부
Private Claims (비공개 클레임):
- 서비스와 클라이언트 간에 협의된 사용자 정보를 포함하는 클레임입니다. 이는 서버와 클라이언트 간에만 의미를 갖습니다.
- 예를 들어, user_id, email, permissions 등이 비공개 클레임이 될 수 있습니다.
Signature
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiAiMTIzNDU2Nzg5MCIsICJuYW1lIjogIkpvaG4gRG9lIiwgImFkbWluIjogdHJ1ZSwgImlhdCI6IDE1MTYyMzkwMjJ9.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
- Header와 Payload를 조합한 문자열에 비밀 키를 이용한 서명을 추가합니다.
- 이들을 조합하면 위와 같은 JWT 토큰이 생성됩니다.
JWT의 구조 예시
xxxxxxxxxx.yyyyyyyyyy.zzzzzzzzzz
- xxxxxxxxxx: Header를 Base64로 인코딩한 값
- yyyyyyyyyy: Payload를 Base64로 인코딩한 값
- zzzzzzzzzz: Header와 Payload의 조합을 서명한 값
JWT 인증 절차는?
- 사용자가 id와 password를 입력하여 로그인을 시도
- 서버는 요청을 확인하고 secret key를 통해 Access token을 발급
- 인증 이후 사용자가 API를 요청할 때 Authorization header에 Access token을 담아서 요청
- 서버는 JWT Signature를 체크하고 Payload로부터 user 정보를 확인하고 원하는 자원을 Return
'-' 카테고리의 다른 글
[개인프로젝트] 웹 만들기 총 정리 (1) | 2024.01.24 |
---|---|
JavaScript / React에서 sync / async(동기 비동기) 관련 상식 (1) | 2023.12.23 |
데이터베이스에서 Index(인덱스) 개념 정리 (2) | 2023.12.06 |
HTTP Method와 status Code(상태 코드) 설명 (1) | 2023.12.06 |
RDB(Relational Database)와 NoSQL(Not Only SQL)의 특징과 차이점 (1) | 2023.12.06 |