Xác thực bằng JSON Web Token (JWT) trong Python
Hướng dẫn về cách sử dụng JSON Web Token (JWT) để xác thực trong ứng dụng Python. Bài viết sẽ giới thiệu cách tạo và xác thực token trong một ứng dụng web để bảo vệ API.
JSON Web Token (JWT) là một chuẩn mở để truyền tải thông tin an toàn giữa các bên dưới dạng JSON. Trong bài viết này, bạn sẽ học cách tạo, mã hóa và giải mã JWT bằng Python và cách sử dụng nó để xác thực các API trong ứng dụng web.
Mã Python:
import jwt # Thư viện PyJWT
import datetime
# Khóa bí mật để mã hóa và giải mã JWT
SECRET_KEY = 'your_secret_key'
# Tạo JWT
def create_jwt(user_id):
# Tạo payload chứa thông tin người dùng và thời gian hết hạn
payload = {
'user_id': user_id,
'exp': datetime.datetime.utcnow() + datetime.timedelta(minutes=30)
}
# Mã hóa token
token = jwt.encode(payload, SECRET_KEY, algorithm='HS256')
return token
# Giải mã JWT
def decode_jwt(token):
try:
# Giải mã token và trả về payload
payload = jwt.decode(token, SECRET_KEY, algorithms=['HS256'])
return payload
except jwt.ExpiredSignatureError:
return 'Token has expired'
except jwt.InvalidTokenError:
return 'Invalid token'
# Ví dụ sử dụng
if __name__ == "__main__":
token = create_jwt(123)
print(f'Token: {token}')
decoded_payload = decode_jwt(token)
print(f'Payload: {decoded_payload}')
Giải thích chi tiết từng dòng code:
-
import jwt
: Import thư viện PyJWT để làm việc với JSON Web Token. -
SECRET_KEY = 'your_secret_key'
: Định nghĩa khóa bí mật để mã hóa và giải mã JWT. -
def create_jwt(user_id)
: Hàm tạo JWT vớiuser_id
và thời gian hết hạn 30 phút. -
payload = {...}
: Định nghĩa payload chứa thông tin người dùng và thời gian hết hạn. -
jwt.encode(...)
: Mã hóa payload thành JWT sử dụng thuật toán HS256. -
def decode_jwt(token)
: Hàm để giải mã JWT và kiểm tra tính hợp lệ của token. -
jwt.decode(...)
: Giải mã token và trả về payload. -
if __name__ == "__main__":
: Ví dụ sử dụng các hàm tạo và giải mã JWT.
Yêu cầu hệ thống:
- Python 3.x
- Thư viện
PyJWT
(có thể cài đặt bằngpip install pyjwt
)
Cách cài đặt các thư viện để chạy được đoạn mã Python trên:
pip install pyjwt
Lời khuyên:
- Không nên sử dụng khóa bí mật mặc định hoặc yếu, cần tạo khóa bảo mật mạnh.
- Xác thực token thường được sử dụng trong API bảo mật, cần lưu ý vấn đề bảo mật như thời gian hết hạn và mức độ bảo mật của khóa bí mật.