JWT 토큰 기반의 파이썬 인증과 권한 부여

개요

인증과 권한은 웹 어플리케이션에서 보안을 강화하기 위해 중요한 요소입니다. JWT(JSON Web Token)은 인증을 위한 토큰 기반의 프로토콜로, 토큰에 사용자 정보와 권한 정보를 담아서 전송합니다. 이를 활용하여 파이썬 웹 어플리케이션에서 JWT 토큰 기반의 인증과 권한 부여를 구현할 수 있습니다.

JWT 토큰 생성

JWT 토큰은 사용자 정보와 추가적인 데이터를 담고 있는 JSON 형식의 토큰입니다. 토큰은 비밀키를 사용하여 서명이 된 상태로 생성되며, 일정 기간 동안 유효합니다.

import jwt

# 토큰에 담을 사용자 정보와 비밀키
payload = {'user_id': 1234, 'role': 'admin'}
secret_key = 'my_secret_key'

# 토큰 생성
token = jwt.encode(payload, secret_key, algorithm='HS256')
print(token)

JWT 토큰 검증

클라이언트는 JWT 토큰을 서버에 전송하고, 서버는 해당 토큰의 유효성을 검증합니다. 검증을 위해서는 비밀키를 사용하여 토큰을 서명해야 합니다.

import jwt

# 클라이언트가 전송한 토큰과 비밀키
token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoxMjM0LCJyb2xlIjoiYWRtaW4ifQ.lO5WcfG8UNUwqZm_pZrqWTm8YauGaivHVw7iRVr2eaw'
secret_key = 'my_secret_key'

# 토큰 검증
try:
    decoded_token = jwt.decode(token, secret_key, algorithms=['HS256'])
    print(decoded_token)
except jwt.ExpiredSignatureError:
    print("토큰이 만료되었습니다.")
except jwt.InvalidTokenError:
    print("유효하지 않은 토큰입니다.")

권한 부여

JWT 토큰을 사용하여 권한 부여를 구현할 수 있습니다. 토큰에는 사용자의 권한 정보를 담고 있으며, 이를 활용하여 필요한 권한을 체크할 수 있습니다.

import jwt

# 토큰에서 권한 정보 추출
token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoxMjM0LCJyb2xlIjoiYWRtaW4ifQ.lO5WcfG8UNUwqZm_pZrqWTm8YauGaivHVw7iRVr2eaw'
secret_key = 'my_secret_key'

decoded_token = jwt.decode(token, secret_key, algorithms=['HS256'])
user_id = decoded_token['user_id']
user_role = decoded_token['role']

# 권한 체크
if user_role == 'admin':
    print("관리자 권한이 있습니다.")
else:
    print("권한이 없습니다.")

결론

JWT 토큰을 사용하면 파이썬 웹 어플리케이션에서 간편하게 인증과 권한 부여를 구현할 수 있습니다. JWT 토큰은 사용자 정보와 권한 정보를 안전하게 전송하고, 서버에서 유효성을 검증하여 보안을 강화하는 데 도움이 됩니다.