认证指南
UniTranslate 提供了两种认证模式,可以根据安全需求选择合适的认证方式。
认证要求
大部分 API 端点都需要认证。在 API 文档中,需要认证的接口都标有 图标。
认证模式
模式 1:直接密钥认证(默认)
这是最简单的认证方式,直接在请求头中传入 API 密钥。
配置示例
在 config.yaml 中设置:
yaml
server:
key: "your-secret-key" # API 密钥
keyMode: 1 # 使用直接密钥模式
使用方法
在 HTTP 请求头中添加 auth_key:
http
auth_key: your-secret-key
或者在请求参数中添加 key:
http
?key=your-secret-key
示例请求:
bash
# 在请求头中使用 auth_key
curl -X POST http://localhost:9431/api/translate \
-H "auth_key: your-secret-key" \
-H "Content-Type: application/json" \
-d '{
"text": "Hello, World!",
"from": "en",
"to": "zh"
}'
# 在 URL 中使用 key 参数
curl -X POST "http://localhost:9431/api/translate?key=your-secret-key" \
-H "Content-Type: application/json" \
-d '{
"text": "Hello, World!",
"from": "en",
"to": "zh"
}'
模式 2:HMAC-SHA256 签名认证
这种模式提供更高的安全性,通过对请求参数进行签名来验证请求的合法性。签名过程采用 HMAC-SHA256 算法,确保请求数据的完整性和真实性。
配置示例
在 config.yaml 中设置:
yaml
server:
key: "your-secret-key" # API 密钥
keyMode: 2 # 使用签名认证模式
签名生成流程
准备参数
- 收集所有请求参数(包括业务参数)到一个映射(Map/Dictionary)中
- 参数支持多种数据类型:
- 基本类型(字符串、数字等)
- 嵌套对象
- 数组
生成签名
- 系统按照以下步骤生成签名:
- 对参数 Map 中的键进行字典序排序
- 将排序后的参数转换为特定格式的字符串
- 使用分配的密钥(Secret Key)对字符串进行 HMAC-SHA256 加密
- 输出十六进制格式的签名
- 系统按照以下步骤生成签名:
发送请求
- 在请求中包含:
- 所有原始请求参数
- 生成的签名(作为 sign 参数)
- 在请求中包含:
签名规则
- 参数排序采用字典序(ASCII 升序)
- 复杂数据类型的处理:
- 嵌套对象:按照键的字典序递归处理
- 数组:保持原始顺序
- 生成的签名为 64 位长的十六进制字符串
示例
请求参数:
json
{
"name": "test",
"age": 25
}
使用密钥 "testkey123" 生成的签名:
d8f6ca2700f502a8ed0fe2e1318dc46aacd03a364cc54dca656c3407e12eb1eb
SDK 支持
UniTranslate 提供多语言 SDK 支持,包括:
最佳实践
密钥管理
- 妥善保管密钥,避免泄露
- 定期更换密钥
- 不同环境使用不同密钥
- 密钥长度建议不少于 16 位
签名验证
- 验证签名时注意参数排序规则
- 注意处理特殊字符和编码问题
- 建议添加时间戳参数,控制请求有效期
- 在开发环境中打印签名字符串,便于调试
安全建议
- 使用 HTTPS 传输
- 敏感环境建议使用签名认证模式
- 定期检查访问日志,及时发现异常
- 实现请求频率限制