API 密钥管理
API 密钥管理界面提供了一个 基于 Web 的用户界面,用于创建、监控和管理用于程序访问 OmniCRM API 的 API 密钥。
注意
有关一般 API 认证概念和使用示例,请参见 concepts_api。
概述
API 密钥使 安全、长期的认证 成为可能,适用于:
- 服务器到服务器的集成
- 自动化脚本
- 第三方应用程序
- 定时任务和 cron 作业
- 外部监控系统
与 JWT 令牌(在几分钟/小时后过期)不同,API 密钥在手动撤销或到期之前始终有效。
访问 API 密钥管理
导航到:
或直接:
所需权限: MANAGE_API_KEYS(管理员角色)
API 密钥列表视图
主页面以表格格式显示所有 API 密钥:
列:
- 名称 - API 密钥的描述性标签(例如,“配置系统”,“监控工具”)
- 创建者 - 创建密钥的用户的用户名
- API 密钥 - 实际的密钥字符串(出于安全原因部分隐藏)
- 状态 - 活动、过期或已撤销
- 创建日期 - 密钥生成的时间
- 到期日期 - 密钥将自动过期的时间
- 操作 - 编辑、删除、重新生成按钮
示例显示:
仪表板小部件
在页面顶部,显示摘要统计信息:
- 总 API 密钥 - 所有 API 密钥的计数(活动和非活动)
- 活动密钥 - 当前有效的密钥
- 即将到期 - 在接下来的 30 天内到期的密钥
- 过期密钥 - 超过到期日期的密钥
创建 API 密钥
步骤 1:点击“添加 API 密钥”
点击 API 密钥列表右上角的 + 添加 按钮。
步骤 2:填写详细信息
会弹出一个模态表单,要求输入:
名称:________________________
(例如,“配置系统”)描述:__________________
(可选 - 此密钥的目的)到期日期:[日期选择器]
(可选 - 留空表示没有到期)权限:☐ 查看客户 ☐ 创建客户 ☐ 查看服务 ☐ 创建服务 ☐ 配置 ☐ 查看库存 ☑ 管理员(所有 权限)
[取消] [生成密钥]
字段指南:
名称(必填)
- 简短、描述性的标识符
- 示例:“��置系统”,“计费集成”,“监控”
- 用于审计日志并在列表中显示
描述(可选)
- 更详细的说明
- 示例:“由 Ansible 配置服务器使用”,“第三方计费同步”
- 帮助未来的管理员理解密钥的目的
到期日期(可选)
- 如果留空:密钥永不失效(不推荐)
- 如果设置:密钥在此日期后自动失效
- 推荐:出于安全考虑设置到期(90 天至 1 年)
权限
- 选择特定权限或勾选“管理员”以获得完全访问权限
- 遵循与用户帐户相同的基于角色的权限模型
- 最佳实践: 分配最低必要权限
步骤 3:生成并复制密钥
点击 “生成密钥” 后,系统会显示新创建的 API 密钥:
⚠️ 立即复制此密钥 - 以后将不再显示!
sk_live_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0
[复制到剪贴板]
[关闭]
警告
请立即保存 API 密钥!
关闭此对话框后,无法再次检索完整密钥。
您只会在列表视图中看到一个被遮蔽的版本(sk_live_...XYZ)。
如果您丢失了密钥,您必须 重新生成 它,这将使旧密钥失效,并可能破坏现有集成。
步骤 4:配置���的应用程序
在应用程序的请求中使用 API 密钥:
curl -X GET "https://yourcrm.com/crm/customers" \
-H "X-API-KEY: sk_live_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0"
或在环境变量中:
export CRM_API_KEY="sk_live_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0"
管理现有密钥
查看密钥详细信息
点击任何 API 密钥名称以查看完整详细信息:
- 完整密钥名称和描述
- 创建时间戳
- 创建者用户名
- 关联权限
- 使用统计信息(如果已实现)
- 最近的访问日志
重新生成 API 密钥
如果 API 密钥被泄露或丢失,请重新生成它:
- 点击操作列中的 ⋮(三个点)
- 选择 “重新生成密钥”
- 确认操作
警告
重新生成会立即使旧密钥失效。
使用旧密钥的任何应用程序将停止工作。在重新生成之前,请使用新密钥更新所有集成。
发生的事情:
- 旧密钥被撤销
- 生成具有相同权限的新密钥
- 显示新密钥(立即复制)
- 名称、描述和权限保持不变
撤销(删除)API 密钥
要永久删除 API 密钥:
- 点击操作列中的 ⋮(三个点)
- 选择 ���删除”
- 确认删除
发生的事情:
- 密钥立即被撤销
- 使用此密钥的所有请求返回
401 Unauthorized - 密钥从数据库中删除
- 无法撤销 - 密钥无法恢复
何时撤销:
- 集成不再需要
- 密钥已被泄露
- 使用该密钥的系统已被淘汰
- 用具有不同权限的新密钥替换
编辑 API 密钥详细信息
要修改 API 密钥的详细信息:
- 点击操作列中的 ⋮(三个点)
- 选择 “编辑”
- 更新名称、描述、到期或权限
- 点击 “保存更改”
可编辑字段:
- 名称
- 描述
- 到期日期
- 权限
不可编辑:
- 密钥值本身(使用重新生成来更改)
- 创建日期
- 创建者用户
API 密钥状态
API 密钥可以有几种状态:
活动
- 密钥有效且可以使用
- 在到期日期内(或未设置到期)
- 未手动撤销
- 显示为绿色徽章
即将到期
- 活动但将在接下来的 30 天内到期
- 显示为橙色/警告徽章
- 考虑在到期前进行轮换
过期
- 超过到期日期
- 不再接受认证
- 显示为红色徽章
- 可以删除或延长到期
已撤销
- 手动删除/禁用
- 永久无效
- 不再显示在活动列表中
过滤和搜索
API 密��列表支持:
搜索:
按名称、描述或部分密钥搜索:
按状态过滤:
过滤下拉菜单显示:
- 所有密钥
- 仅活动
- 即将到期(接下来的 30 天)
- 过期
排序:
点击列标题按以下内容排序:
- 名称
- 创建日期
- 到期日期
- 创建者
安全最佳实践
API 密钥生成
- 长度: 密钥应至少为 32 个字符(系统强制执行此项)
- 随机性: 使用密码学安全的随机数生成器生成
- 格式: 通常以前缀形式(例如,
sk_live_)进行标识
API 密钥存储
在 CRM 中:
- 密钥在存储前被哈希(如同密码)
- 创建时仅显示完整密钥一次
- 数据库存储哈希以供验证
- 即使是管理员也无法在之后检索完整密钥
在您的应用程序中:
- 存储在环境变量中,而不是代码中
- 使用秘密管理系统(AWS Secrets Manager、HashiCorp Vault)
- 永远不要将密钥提交到版本控制
- 定期轮换密钥(90-365 天)
权限管理
- 最小权限原则 - 仅授予必要的权限
- 除非绝对必要,否则避免创建管理员密钥
- 为不同的系统/目的使用单独的密钥
- 定期审查权限
监控和审计
- 通过活动日志监控 API 密钥使用情况
- ���置异常访问模式的警报
- 定期审查“最后使用”时间戳
- 删除未使用的密钥
密钥轮换
建立密钥轮换政策:
- 创建新密钥,权限相同
- 更新应用程序以使用新密钥
- 监控以确保旧密钥不再使用
- 在宽限期后撤销旧密钥
故障排除
使用 API 密钥时出现“401 Unauthorized”
- 原因: 密钥无效、过期或不正确
- 解决方法:
- 验证密钥是否正确复制(没有额外空格)
- 检查密钥状态(活动与过期)
- 确认密钥具有所需权限
- 确保使用
X-API-KEY头(而不是Authorization)
创建后出现“未找到 API 密钥”
- 原因: 密钥可能已创建但未正确存储
- 解决方法:
- 检查 API 密钥列表是否有新条目
- 如果缺失,请创建新密钥
- 向管理员报告问题
API 密钥即将过期
- 原因: 到期日期临近(30 天内)
- 解决方法:
- 创建具有延长到期的新密钥
- 更新应用程序以使用新密钥
- 在迁移后撤销旧密钥
无法删除 API 密钥
- 原因: 可能被保护或正在使用
- 解决方法:
- 确保您具有管理员权限
- 检查密钥是否被锁定/保护
- 如果问题仍然存在,���联系管理员
API 端点(用于程序管理)
API 密钥也可以通过 API 管理(需要管理员权限):
列出 API 密钥
GET /crm/api-keys
Authorization: Bearer <admin-token>
创建 API 密钥
POST /crm/api-keys
Authorization: Bearer <admin-token>
Content-Type: application/json
{
"name": "New Integration",
"description": "Third-party billing sync",
"expiry_date": "2026-01-10",
"permissions": ["view_customer", "view_service"]
}
响应:
{
"api_key_id": 123,
"name": "New Integration",
"api_key": "sk_live_a1b2c3d4e5f6g7h8i9j0",
"status": "active",
"created": "2025-01-10T10:00:00Z",
"expiry_date": "2026-01-10T23:59:59Z"
}
撤销 API 密钥
DELETE /crm/api-keys/{api_key_id}
Authorization: Bearer <admin-token>
更新 API 密钥
PATCH /crm/api-keys/{api_key_id}
Authorization: Bearer <admin-token>
Content-Type: application/json
{
"name": "Updated Name",
"expiry_date": "2026-12-31"
}
常见用例
用例 1:配置系统集成
为您的 Ansible 配置服务器创建一个 API 密钥:
- 导航到 API 密钥 → 添加
- 名称:“Ansible 配置服务器”
- 描述:“由配置��动化使用”
- 权限:配置、查看/创建服务、查看/更新库存
- 到期:1 年
- 复制密钥并添加到 Ansible
crm_config.yaml
用例 2:第三方计费集成
为计费导出创建一个只读密钥:
- 名称:“计费同步 - QuickBooks”
- 权限:查看客户、查看交易、查看发票
- 到期:90 天(每季度轮换)
- 在定期导出脚本中使用
用例 3:监控和警报
为 Prometheus/Grafana 指标收集创建一个密钥:
- 名称:“监控 - Grafana”
- 权限:查看服务、查看配置
- 到期:永不(监控需要持续访问)
- 在 Grafana 数据源中配置
用例 4:客户门户 API
为客户自助服务门户创建一个密钥:
- 名称:“客户门户后端”
- 权限:查看自己的客户、查看自己的服务、创建付款
- 到期:180 天
- 在门户后端 API 调用中使用
相关文档
concepts_api- API 认证概念和示例rbac- 基于角色的访问控制和权限2fa- 额外安全性的双因素认证