API安全是数据交互的核心保障。本文聚焦API认证的主流框架与工具,通过技术代码示例解析API Key、JWT令牌和HMAC签名三种核心认证方式。
一、API Key认证:轻量级身份验证
适用于内部系统或低风险场景,通过密钥实现身份确认。
代码示例:
import requests
response = requests.get(
"https://api.example.com/data",
headers={
"Authorization": "ApiKey YOUR_SECRET_KEY"} # 密钥需环境变量注入
)
- 密钥严禁硬编码,推荐通过环境变量或KMS管理。
- 仅适用于低敏感度场景,需配合HTTPS传输。
二、JWT(JSON Web Token)认证:无状态服务标配
适用于微服务、前后端分离场景,令牌自含用户权限信息。
代码示例:
from flask import Flask, request, jsonify
import jwt
from datetime import datetime, timedelta
app = Flask(__name__)
JWT_SECRET = "your_secret_key"
# 生成token
def create_token(user_id):
payload = {
"userId": user_id,
"exp": datetime.utcnow() + timedelta(hours=1)
}
return jwt.encode(payload, JWT_SECRET, algorithm="HS256")
# 验证token装饰器
def token_required(f):
def wrapper(*args, **kwargs):
token = request.headers.get("Authorization")
if not token:
return jsonify({
"error": "Token missing"}), 401
try:
token = token.split()[1] if "Bearer " in token else token
data = jwt.decode(token, JWT_SECRET, algorithms=["HS256"])
request.current_user = data
except jwt.ExpiredSignatureError:
return jsonify({
"error": "Token expired"}), 403
except jwt.InvalidTokenError:
return jsonify({
"error": "Invalid token"}), 403
return f(*args, **kwargs)
return wrapper
# 受保护接口
@app.route("/protected")
@token_required
def protected():
return jsonify({
"message": f"Hello User {request.current_user['userId']}"})
if __name__ == "__main__":
print("Token:", create_token(123))
app.run(debug=True)
- 设置短期有效期(如1小时),避免令牌长期泄露风险。
- 支持权限声明(如
scopes字段),灵活控制资源访问。
三、HMAC签名认证:金融级安全防线
适用于高安全场景(如支付接口),通过签名防篡改与重放攻击。
代码示例:
import hmac
import hashlib
import base64
def generate_signature(data, secret):
# HMAC-SHA256 签名 + Base64编码
signature = hmac.new(secret.encode(), data.encode(), hashlib.sha256).digest()
return base64.b64encode(signature).decode()
if __name__ == "__main__":
data = "example_data_to_sign"
secret = "your_secret_key"
signature = generate_signature(data, secret)
print(f"签名结果: {signature}")
print(f"Authorization请求头: HMAC-SHA256 Signature={signature}")
- 签名数据包含时间戳与随机数(如UUID),抵御重放攻击。
- 必须配合HTTPS,确保传输过程不被篡改。
选择合适的API认证方式,是平衡安全与效率的关键。结合场景需求,搭配密钥管理、传输加密等实践,可构建坚不可摧的API安全体系。