오늘날 웹 애플리케이션은 사용자 인증 및 권한 부여를 위해 다양한 방법을 사용하고 있습니다. 그 중 JSON Web Token, 즉 JWT는 널리 사용되는 표준이 되었습니다. 이 블로그 글에서는 Python에서 JWT를 사용한 인증 방식을 초보자도 이해할 수 있도록 자세히 설명하겠습니다.
JSON Web Token (JWT)은 클라이언트와 서버 간의 안전한 정보 전송을 위해 사용하는 개방형 표준입니다. JWT는 JSON 객체로 인코딩된 정보를 포함하고 있으며, 주로 다음과 같은 기능을 수행합니다.
JWT는 보통 세 부분으로 구성됩니다. 이 세 부분은 점(.)으로 구분됩니다:
아래는 JWT의 예시입니다:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MjIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
Python에서 JWT를 사용하기 위해서는 PyJWT 라이브러리를 설치해야 합니다. 이를 위해 아래의 명령어를 터미널에 입력합니다:
pip install PyJWT
다음은 JWT를 생성하는 간단한 코드 예제입니다:
import jwt
import datetime
SECRETKEY = 'yoursecret_key'
payload = {
'userId': 1234,
'exp': datetime.datetime.utcnow() + datetime.timedelta(days=1)
}
token = jwt.encode(payload, SECRET_KEY, algorithm='HS256')
print(token)
JWT를 검증하는 방법은 다음과 같습니다:
try:
decodedpayload = jwt.decode(token, SECRETKEY, algorithms=['HS256'])
print(decoded_payload)
except jwt.ExpiredSignatureError:
print('토큰이 만료되었습니다.')
except jwt.InvalidTokenError:
print('유효하지 않은 토큰입니다.')
Flask 웹 프레임워크를 사용하여 JWT 인증을 구현하는 방법은 다음과 같습니다:
from flask import Flask, request, jsonify
import jwt
import datetime
app = Flask(name)
SECRETKEY = 'yoursecret_key'
@app.route('/login', methods=['POST'])
def login():
user_id = request.json['userId']
token = jwt.encode({'userId': userid, 'exp': datetime.datetime.utcnow() + datetime.timedelta(days=1)}, SECRETKEY, algorithm='HS256')
return jsonify(token=token)
@app.route('/protected', methods=['GET'])
def protected():
token = request.headers.get('Authorization')
if not token:
return jsonify({'message': '토큰이 필요합니다.'}), 401
try:
decodedpayload = jwt.decode(token, SECRETKEY, algorithms=['HS256'])
return jsonify({'message': '보호된 데이터에 접근했습니다.', 'userId': decoded_payload['userId']})
except jwt.ExpiredSignatureError:
return jsonify({'message': '토큰이 만료되었습니다.'}), 401
except jwt.InvalidTokenError:
return jsonify({'message': '유효하지 않은 토큰입니다.'}), 401
if name == 'main':
app.run(debug=True)
JWT의 안전한 사용을 위해서는 비밀키를 안전하게 관리해야 합니다. 비밀키가 외부에 노출되면, 누군가 그 키를 사용하여 유효한 토큰을 생성할 수 있습니다.
JWT는 일반적으로 만료 조건을 설정하여 사용합니다. 만료 시간이 설정되지 않은 JWT는 무제한으로 사용될 수 있기 때문에 주의가 필요합니다.
서버에서 받은 JWT의 유효성을 반드시 검증해야 합니다. 검증하지 않고 그대로 사용하면 보안에 심각한 문제가 발생할 수 있습니다.
JSON Web Token은 Python에서 사용자 인증 및 권한 부여를 구현하는 데 매우 유용한 도구입니다. 간단한 방법으로 생성하고 사용할 수 있으며, 다양한 플랫폼과 호환됩니다. 그러나 보안상의 이유로 비밀키 관리와 여러 가지 주의사항을 지켜야 합니다.
JWT를 통한 인증 방식은 현대 웹 애플리케이션에서 중요한 역할을 하며, 이를 이해하고 적절히 활용하는 것이 개발자에게는 필수적인 기술입니다. 앞으로도 JWT에 대한 이해를 바탕으로 더욱 발전된 웹 서비스를 구축해 나가기를 바랍니다.
</>