import jwt
encoded_jwt = jwt.encode({"some": "payload"}, "secret", algorithm="HS256")
🤖 Hows Going?
오늘은 쉬고 싶은 날...
너무 쉬고 싶다.
하지만 걸렸으니깐 해야겠지..
JWT
1. JWT란?
- JWT (JSON Web Token)는 JSON 객체를 사용하여 정보를 안전하게 전달하기 위한 컴팩트하고 자가 포함된 방식의 토큰입니다. 주로 인증 및 권한 부여 메커니즘으로 사용
2. JWT 구조
- JWT의 구조는 기본적으로 3 가지로 구성 된다
1) Header(헤더) : 토큰의 유형과 해싱 알고리즘을 지정
- 헤더는 두분으로 구성
- typ: 토큰의 유형 (JWT)
- alg: 서명 알고리즘 (예: HMAC SHA256 또는 RSA)
{
"alg": "HS256",
"typ": "JWT"
}
2) Payload(페이로드) : 토큰의 실제 데이터(클레임)을 포함합니다. 예: 사용자 정보, 토큰의 만료 시간 등
- sub: 토큰의 주체(보통 사용자 ID)
- name: 사용자 이름
- iat: 토큰 발급 시간 (issued at)
{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
}
3) Signature(서명) : 서명은 헤더와 페이로드를 인코딩한 후, 비밀 키와 함께 지정된 알고리즘을 사용하여 생성
이렇게 만든 JWT는 다음고 같은 형식을 가짐
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
2. JWT의 사용사례
1. 인증 (Authentication)
사용자가 로그인하면 서버는 사용자의 정보를 포함한 JWT를 발급합니다. 클라이언트는 이후 요청 시 이 JWT를 HTTP 헤더에 포함시켜 서버에 전송합니다. 서버는 JWT를 검증하여 사용자를 식별합니다.
2. 권한 부여 (Authorization)
사용자가 접근하려는 리소스에 대한 권한을 확인하는 데 사용됩니다. JWT의 클레임에 사용자의 권한 정보를 포함시켜 서버에서 이를 확인할 수 있습니다.
3. JWT 장점 단점
장점
- 자가 포함: 필요한 모든 정보를 자체적으로 포함하여 별도의 데이터베이스 조회가 필요 없습니다.
- 확장성: 분산 시스템에서 잘 동작합니다.
- 보안: 서명을 통해 데이터의 무결성을 보장합니다.
단점
- 토큰 크기: 토큰이 비교적 커서 네트워크 트래픽이 늘어날 수 있습니다.
- 취소 어려움: 한 번 발급된 토큰을 만료 전까지 취소하기 어렵습니다. 이를 해결하기 위해 블랙리스트를 사용해야 할 수 있습니다.
JWT는 다양한 플랫폼에서 사용되며, 특히 RESTful API 인증에 많이 사용됩니다. 보안을 위해 HTTPS를 통해 전달되어야 하며, 비밀 키는 안전하게 관리되어야 합니다.