一个简单但安全的API授权机制可以采用基于HMAC(哈希消息认证码)的签名方案。以下是实现方案:
密钥分配:
请求签名:
收集请求参数:
api_key=ABC123×tamp=1630000000&nonce=random123¶m1=value1
参数排序:
构造签名字符串:
HTTP方法\n请求路径\n排序后参数键值对
GET\n/api/v1/resource\napi_key=ABC123&nonce=random123¶m1=value1×tamp=1630000000
计算HMAC签名:
signature = HMAC-SHA256(secret_key, sign_string)
添加签名到请求:
Authorization: HMAC-SHA256 ABC123:signature_hex
import hmac
import hashlib
import time
import uuid
def generate_signature(secret_key, method, path, params):
# 排序参数
sorted_params = '&'.join([f"{k}={params[k]}" for k in sorted(params.keys())])
# 构造签名字符串
sign_string = f"{method.upper()}\n{path}\n{sorted_params}"
# 计算HMAC
signature = hmac.new(
secret_key.encode('utf-8'),
sign_string.encode('utf-8'),
hashlib.sha256
).hexdigest()
return signature
# 客户端使用示例
api_key = "ABC123"
secret_key = "your_secret_key_here"
params = {
"api_key": api_key,
"timestamp": int(time.time()),
"nonce": str(uuid.uuid4()),
"param1": "value1"
}
signature = generate_signature(secret_key, "GET", "/api/v1/resource", params)
headers = {
"Authorization": f"HMAC-SHA256 {api_key}:{signature}"
}
这种方案简单易实现,同时提供了良好的安全性,适用于大多数API授权场景。