728x90
반응형
JWT (Json Web Token)
JWT는 웹 표준(RFC 7519) 으로 두 개체 사이에서 JSON을 사용하여 정보를 안전성 있게 전달해준다.
웹에서 로그인을 하거나 인증을 받게되면 보통 세션을 사용하여 인증 정보를 기록하는데, JWT는 토큰 내부의 Signature에 해당 정보를 기록한다. JWT를 사용할 경우 인증을 위해 웹 브라우저의 세션 공간을 사용하지 않고 인증 여부를 알 수 있기 때문에 확장성이 좋다. 또한 생성 시 권한을 지정할 수 있어 각 토큰별로 기능을 제어할 수 있고 플랫폼에 종속적이지 않다.
JWT의 구조는 Header.Payload.Signature로 나뉘어져 있다. Header는 토큰의 typ(해당 토큰의 타입)과 alg(해싱 알고리즘)을 Payload는 토큰에 담을 정보를 그리고 마지막 Signature는 Header와 Paylaod의 Base64 인코딩 값을 시크릿 키와 함께 다시 한번 해싱한 후 인코딩한 값을 가진다.
파이썬의 PyJWT 패키지를 사용해서 직접 토큰을 만들고 검증해보자.
구현
파이썬에서의 jwt 사용은 아래처럼 PyJWT를 설치하거나 requirements.txt에 작성해두고 사용할 수 있다.
간단하게 토큰의 생성과 검증하는 기능을 만들어 보았다.
pip install PyJWT
import sys
import subprocess
try:
import jwt
except:
subprocess.check_call([sys.executable, '-m', 'pip', 'install', '--upgrade', 'pip'])
subprocess.check_call([sys.executable, '-m', 'pip', 'install', '-r', 'requirements.txt'])
import jwt
class Jwt():
def __init__(self, payloads, secret_key):
self.payloads = payloads
self.algorithm = "HS256"
self.secret_key = secret_key
def create_token(self):
return jwt.encode(self.payloads, key=self.secret_key, algorithm=self.algorithm)
def verify_token(self, token):
try:
payload = jwt.decode(token, key=self.secret_key, algorithms=self.algorithm)
except jwt.ExpiredSignatureError:
return "토큰 인증 만료"
except jwt.InvalidTokenError:
return "토큰 검증 실패"
return payload
if __name__ == '__main__':
payload = {"id":"hwan"}
my_jwt = Jwt(payload, "secret")
token = my_jwt.create_token()
print("token : ", token)
print("payload : ", my_jwt.verify_token(token))
후기
JWT를 직접 구현할 수도 있겠지만 파이썬의 JWT 패키지를 사용한다면 간단하게 토큰을 만들어볼 수 있다.
위에서 생성한 토큰은 아래 사이트에서도 검증이 가능하다. 직접 구현해볼 땐 아래 사이트를 활용하면 도움이 될 것 같다.
728x90
반응형
'프로그래밍 > Python' 카테고리의 다른 글
[Python] 디렉토리 내부의 동일한 파일 찾기 (1) | 2022.12.10 |
---|---|
[Python] Docstring (0) | 2022.11.27 |
[Python] OS 모듈 : 디렉토리 전체 탐색하기 (하위 디렉토리까지) (0) | 2022.11.20 |
[Python] Yahoo_fin 모듈 (0) | 2022.09.11 |
[Python] Paramiko 모듈 (0) | 2022.07.07 |
[Python] 데코레이터 (@, Decorator) (0) | 2022.03.21 |
댓글