JWT란?
JWT(토큰)는 JSON Web Token의 약자로, 클라이언트와 서버 간의 인증을 위한 표준 방법 중 하나입니다. JWT는 토큰 내에 클레임(Claim) 정보를 포함하고 있으며, 이를 사용하여 사용자 인증 및 권한 부여 등을 수행합니다.
JWT 토큰 발급하기
아래의 파이썬 코드는 PyJWT 라이브러리를 사용하여 JWT 토큰을 발급하는 방법을 보여줍니다. 이 예시에서는 HS256 알고리즘을 사용하고, 시크릿 키를 통해 토큰을 서명합니다.
import jwt
import datetime
# 토큰 발급 함수
def issue_token(user_id):
payload = {
'user_id': user_id,
'exp': datetime.datetime.utcnow() + datetime.timedelta(hours=1)
}
jwt_token = jwt.encode(payload, 'secret_key', algorithm='HS256')
return jwt_token
위의 코드에서 user_id
는 사용자 식별자로, exp
는 토큰의 만료 시간입니다. 발급된 토큰은 jwt_token
변수에 저장되며, 이를 클라이언트에게 전달할 수 있습니다.
JWT 토큰 검증하기
아래의 파이썬 코드는 PyJWT 라이브러리를 사용하여 JWT 토큰을 검증하는 방법을 보여줍니다. 이 예시에서는 HS256 알고리즘과 시크릿 키를 사용하여 토큰의 유효성을 확인합니다.
import jwt
# 토큰 검증 함수
def verify_token(jwt_token):
try:
payload = jwt.decode(jwt_token, 'secret_key', algorithms=['HS256'])
return payload
except jwt.ExpiredSignatureError:
# 토큰이 만료되었을 경우 예외 처리
return "Token expired"
except jwt.InvalidTokenError:
# 잘못된 토큰일 경우 예외 처리
return "Invalid token"
위의 코드에서 jwt_token
은 검증할 JWT 토큰입니다. jwt.decode()
함수를 사용하여 토큰을 복호화하고, 복호화된 정보를 반환합니다. 만약 토큰이 만료되었거나 유효하지 않은 경우에는 예외 처리하여 적절한 메시지를 반환할 수 있습니다.
JWT 토큰 로그 저장 및 제어
JWT 토큰 발급과 검증 시에는 로그를 저장하고 제어하는 것이 보안 및 추적성 측면에서 중요합니다. 아래의 코드는 로그 파일에 토큰 발급 및 검증 로그를 기록하는 예시입니다.
import logging
# 로거 설정
logging.basicConfig(filename='token.log', level=logging.INFO)
# 토큰 발급 함수
def issue_token(user_id):
# 토큰 발급 코드 생략
logging.info(f'Token issued for user {user_id}')
return jwt_token
# 토큰 검증 함수
def verify_token(jwt_token):
# 토큰 검증 코드 생략
logging.info('Token verified')
return payload
위의 코드에서 logging.basicConfig()
함수를 사용하여 로깅을 설정하고, logging.info()
함수를 사용하여 로그를 기록합니다. 발급 및 검증 로그는 token.log
파일에 기록되며, 필요에 따라 로거 설정을 조정할 수 있습니다.
마무리
위의 예시 코드를 참고하여 파이썬을 사용하여 JWT 토큰을 발급하고 검증하는 방법을 알아보았습니다. JWT 토큰의 로그 저장과 제어 가능성은 보안 및 추적성 측면에서 중요하므로, 필요에 따라 적절한 로그 기록과 예외 처리를 추가하여 안전한 JWT 토큰 시스템을 구축할 수 있습니다.
#JWT #파이썬