Documentation

API密钥管理

创建和管理API密钥,实现程序化访问和自动化集成

API密钥管理让您可以创建、管理和监控用于访问平台API的密钥,实现自动化集成和程序化访问。

功能概览

核心功能

  • 密钥生成 - 创建具有不同权限的API密钥
  • 权限控制 - 细粒度的权限管理
  • 使用监控 - 追踪API密钥的使用情况
  • 速率限制 - 控制API调用频率
  • 安全管理 - 密钥吊销和过期管理

API密钥统计

进入API密钥管理页面,顶部显示密钥使用概况:

📊 密钥概览

  • 总密钥数 - 已创建的API密钥总数
  • 活跃密钥 - 当前有效的密钥数量
  • 过期密钥 - 已过期的密钥数量
  • 已吊销密钥 - 已被吊销的密钥数量

📈 使用统计

  • 总请求数 - 所有密钥的累计请求次数
  • 本月请求 - 当月的API调用次数
  • 平均响应时间 - API的平均响应速度
  • 错误率 - API调用失败的比例

🔒 安全状态

  • 即将过期 - 30天内将过期的密钥
  • 异常活动 - 检测到的异常使用行为
  • 最后使用 - 最近一次API调用时间

创建API密钥

基本信息

点击 "创建API密钥" 按钮开始:

密钥名称

  • 名称 - 便于识别的密钥名称(必填)
    • 例如:生产环境密钥、测试密钥、自动化脚本
  • 描述 - 密钥用途说明(可选)
    • 例如:用于CI/CD自动化部署

过期设置

选择密钥的有效期:

  • 永不过期 - 密钥长期有效(不推荐)
  • 30天 - 短期测试使用
  • 90天 - 临时项目
  • 180天 - 半年有效期
  • 1年 - 长期项目
  • 自定义 - 指定具体过期日期

💡 安全建议:出于安全考虑,建议设置合理的过期时间,并定期轮换密钥。

权限配置

选择API密钥的访问权限:

只读权限(Read)

允许读取数据但不能修改:

  • ✅ 获取网站列表
  • ✅ 查看分析报告
  • ✅ 读取关键词数据
  • ✅ 查看统计信息
  • ❌ 创建/修改/删除资源

适用场景:

  • 数据展示仪表板
  • 报表系统集成
  • 监控和告警系统

写入权限(Write)

允许创建和修改资源:

  • ✅ 只读权限的所有功能
  • ✅ 创建新网站
  • ✅ 添加关键词
  • ✅ 上传数据源
  • ✅ 创建内容
  • ❌ 删除资源

适用场景:

  • 内容管理系统集成
  • 自动化内容发布
  • 批量数据导入

完全权限(Full)

拥有所有操作权限:

  • ✅ 读取权限的所有功能
  • ✅ 写入权限的所有功能
  • ✅ 删除资源
  • ✅ 修改设置
  • ✅ 管理用户和团队

适用场景:

  • 管理员自动化脚本
  • 完整系统集成
  • 开发和测试环境

⚠️ 警告:完全权限密钥具有最高权限,请谨慎保管,仅在必要时使用。

速率限制

设置API调用频率限制:

预设限制

  • 开发环境 - 100次/小时
  • 生产环境(基础) - 1,000次/小时
  • 生产环境(标准) - 5,000次/小时
  • 生产环境(专业) - 10,000次/小时
  • 自定义 - 根据套餐自定义限制

限制说明

  • 超过速率限制会返回 429 Too Many Requests 错误
  • 限制按小时滚动窗口计算
  • 可在密钥详情页查看当前使用情况

创建确认

点击 "创建" 按钮后:

  1. 系统生成密钥 - 创建唯一的API密钥
  2. 显示完整密钥 - 仅此一次显示完整密钥
  3. 安全保存 - 将密钥保存到安全位置
  4. 确认保存 - 确认已保存后关闭窗口

🔐 重要提示:

  • 密钥仅在创建时显示一次
  • 无法再次查看完整密钥
  • 丢失后需要重新创建
  • 请妥善保管,不要泄露

API密钥列表

列表视图

显示所有创建的API密钥:

列说明
名称密钥名称和描述
密钥前缀密钥的前8位字符
密钥提示密钥的后4位字符
权限密钥的权限级别
速率限制每小时调用次数限制
状态活跃/过期/已吊销
总请求累计请求次数
最后使用最近一次使用时间
过期时间密钥过期日期
操作查看/吊销/删除

状态标识

🟢 活跃(Active)

  • 密钥正常可用
  • 在有效期内
  • 未被吊销

🔴 过期(Expired)

  • 已超过有效期
  • 无法再使用
  • 建议删除或更新

⚫ 已吊销(Revoked)

  • 已被手动吊销
  • 立即失效
  • 无法恢复

密钥识别

由于安全原因,列表中不显示完整密钥,仅显示:

  • 前缀:sk_live_abcd1234(前8位)
  • 提示:...xyz9(后4位)

例如:sk_live_abcd1234...xyz9

这样既能识别密钥,又不会泄露完整内容。

密钥详情

点击密钥名称查看详细信息:

基本信息

  • 密钥名称 - 显示名称
  • 描述 - 用途说明
  • 密钥ID - 系统唯一标识符
  • 密钥提示 - 前缀和后缀
  • 创建时间 - 密钥创建日期
  • 创建者 - 创建该密钥的用户

权限和限制

  • 权限级别 - Read/Write/Full
  • 权限详情 - 具体权限列表
  • 速率限制 - 每小时调用限制
  • 当前使用 - 本小时已使用次数
  • 剩余额度 - 本小时剩余调用次数

使用统计

请求统计

  • 总请求数 - 累计API调用次数
  • 成功请求 - 成功的调用数
  • 失败请求 - 失败的调用数
  • 平均响应时间 - API响应速度

时间分布

  • 最后使用时间 - 最近一次调用
  • 首次使用时间 - 第一次调用
  • 活跃天数 - 使用的天数
  • 平均日请求 - 每天平均调用次数

使用趋势图

  • 按天展示请求量趋势
  • 识别使用模式
  • 发现异常峰值

安全信息

过期管理

  • 过期时间 - 密钥失效日期
  • 剩余天数 - 距离过期的天数
  • 过期提醒 - 即将过期的警告

吊销记录

  • 是否已吊销 - 吊销状态
  • 吊销时间 - 吊销操作时间
  • 吊销原因 - 吊销说明
  • 操作人 - 执行吊销的用户

使用位置

  • 最后使用IP - 最近调用的IP地址
  • 常用IP - 频繁使用的IP列表
  • 地理位置 - IP对应的地理位置
  • 异常检测 - 异常使用提示

密钥操作

复制密钥提示

点击复制图标复制密钥提示:

sk_live_abcd1234...xyz9

虽然这不是完整密钥,但可以帮助您识别密钥。

查看使用日志

点击 "查看日志" 查看详细的API调用记录:

时间端点方法状态响应时间IP地址
2024-12-09 10:30:15/api/sitesGET20045ms1.2.3.4
2024-12-09 10:28:32/api/keywordsPOST201120ms1.2.3.4

日志保留最近30天的记录。

吊销密钥

如果密钥泄露或不再需要,立即吊销:

  1. 点击密钥的 "吊销" 按钮
  2. 输入吊销原因(可选)
  3. 确认吊销操作
  4. 密钥立即失效

⚠️ 注意:

  • 吊销后密钥立即失效
  • 使用该密钥的应用会收到认证错误
  • 吊销操作不可撤销
  • 需要时重新创建新密钥

吊销场景

何时应该吊销密钥:

  • 🚨 密钥泄露 - 密钥被意外公开
  • 🔄 定期轮换 - 按安全策略定期更换
  • 👤 员工离职 - 相关人员离职
  • 🛠️ 项目结束 - 项目不再需要访问
  • 📱 设备丢失 - 存储密钥的设备遗失

删除密钥

永久删除不需要的密钥记录:

  1. 点击密钥的 "删除" 按钮
  2. 确认删除操作
  3. 密钥及其历史记录被删除

⚠️ 警告:

  • 只能删除已过期或已吊销的密钥
  • 活跃密钥需要先吊销才能删除
  • 删除后无法恢复
  • 历史统计数据会丢失

刷新密钥

更新现有密钥(保持权限不变):

  1. 点击密钥的 "刷新" 按钮
  2. 系统生成新的密钥字符串
  3. 旧密钥立即失效
  4. 显示新密钥(仅一次)
  5. 更新应用中的密钥

适用场景:

  • 定期密钥轮换
  • 怀疑密钥可能泄露
  • 安全策略要求

密钥使用

认证方式

在API请求中使用密钥:

HTTP Header认证(推荐)

curl -X GET https://api.solokit.com/v1/sites \
  -H "Authorization: Bearer sk_live_your_api_key_here" \
  -H "Content-Type: application/json"

Query参数认证

curl -X GET "https://api.solokit.com/v1/sites?api_key=sk_live_your_api_key_here"

💡 推荐:使用Header认证更安全,避免密钥出现在URL日志中。

代码示例

JavaScript/Node.js

const fetch = require('node-fetch');

const apiKey = 'sk_live_your_api_key_here';
const baseUrl = 'https://api.solokit.com/v1';

async function getSites() {
  const response = await fetch(`${baseUrl}/sites`, {
    method: 'GET',
    headers: {
      'Authorization': `Bearer ${apiKey}`,
      'Content-Type': 'application/json'
    }
  });
  
  const data = await response.json();
  return data;
}

getSites().then(sites => {
  console.log('Sites:', sites);
});

Python

import requests

api_key = 'sk_live_your_api_key_here'
base_url = 'https://api.solokit.com/v1'

headers = {
    'Authorization': f'Bearer {api_key}',
    'Content-Type': 'application/json'
}

response = requests.get(f'{base_url}/sites', headers=headers)
sites = response.json()

print('Sites:', sites)

PHP

<?php
$apiKey = 'sk_live_your_api_key_here';
$baseUrl = 'https://api.solokit.com/v1';

$ch = curl_init($baseUrl . '/sites');
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Authorization: Bearer ' . $apiKey,
    'Content-Type: application/json'
));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$response = curl_exec($ch);
$sites = json_decode($response, true);

print_r($sites);
curl_close($ch);
?>

错误处理

处理API认证错误:

401 Unauthorized

{
  "error": {
    "code": "invalid_api_key",
    "message": "The API key provided is invalid or has been revoked."
  }
}

原因:

  • 密钥不存在或格式错误
  • 密钥已被吊销
  • 密钥已过期

403 Forbidden

{
  "error": {
    "code": "insufficient_permissions",
    "message": "This API key does not have permission to perform this action."
  }
}

原因:

  • 密钥权限不足
  • 尝试访问未授权的资源

429 Too Many Requests

{
  "error": {
    "code": "rate_limit_exceeded",
    "message": "Rate limit exceeded. Please retry after 3600 seconds.",
    "retry_after": 3600
  }
}

原因:

  • 超过速率限制
  • 需要等待后重试

安全最佳实践

密钥存储

✅ 推荐做法

  1. 环境变量

    # .env文件
    SOLOKIT_API_KEY=sk_live_your_api_key_here
    
  2. 密钥管理服务

    • AWS Secrets Manager
    • Azure Key Vault
    • HashiCorp Vault
    • Google Secret Manager
  3. 配置文件(不提交到版本控制)

    {
      "apiKey": "sk_live_your_api_key_here"
    }
    
    # .gitignore
    config.json
    .env
    .env.local
    

❌ 禁止做法

  1. 硬编码在代码中

    // ❌ 不要这样做
    const apiKey = 'sk_live_abc123...';
    
  2. 提交到版本控制

    # ❌ 不要提交包含密钥的文件
    git add .env
    
  3. 在客户端使用

    // ❌ 不要在前端暴露API密钥
    fetch('https://api.solokit.com/v1/sites', {
      headers: { 'Authorization': 'Bearer sk_live_...' }
    });
    

权限最小化

遵循最小权限原则:

  • 📖 只读场景使用只读密钥 - 不需要写入权限时使用Read
  • ✏️ 写入场景使用写入密钥 - 不需要删除权限时使用Write
  • 🔐 避免过度授权 - 不要默认使用Full权限
  • 🎯 按应用分配密钥 - 每个应用使用独立密钥

定期轮换

建立密钥轮换机制:

轮换策略

  • 生产环境 - 每90天轮换一次
  • 开发环境 - 每30天轮换一次
  • 临时密钥 - 使用后立即删除
  • 共享密钥 - 人员变动后立即轮换

轮换流程

  1. 创建新的API密钥
  2. 在应用中配置新密钥(保留旧密钥作为备用)
  3. 验证新密钥工作正常
  4. 吊销旧密钥
  5. 从应用中移除旧密钥

监控异常

设置监控和告警:

监控指标

  • 异常流量 - 请求量突然激增
  • 新IP地址 - 从未见过的IP访问
  • 高错误率 - 认证失败率上升
  • 异常时间 - 非工作时间的访问

告警设置

在 "通知设置" 中配置:

  • API密钥异常使用告警
  • 速率限制告警
  • 密钥即将过期提醒
  • 认证失败次数告警

泄露响应

如果密钥泄露,立即采取行动:

应急步骤

  1. ⚡ 立即吊销密钥 - 防止进一步滥用
  2. 🔍 检查使用日志 - 确认是否被滥用
  3. 🆕 创建新密钥 - 生成替代密钥
  4. 🔄 更新应用 - 在所有应用中更新密钥
  5. 📊 审查影响 - 评估潜在损失
  6. 📝 记录事件 - 文档化事件和响应

预防措施

  • 定期审查密钥使用情况
  • 使用密钥管理服务
  • 实施代码审查
  • 使用自动化扫描工具检测泄露

使用场景

CI/CD集成

在持续集成/部署流程中使用:

# GitHub Actions示例
name: Deploy
on: [push]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      
      - name: Run SEO Analysis
        env:
          SOLOKIT_API_KEY: ${{ secrets.SOLOKIT_API_KEY }}
        run: |
          curl -X POST https://api.solokit.com/v1/sites/analyze \
            -H "Authorization: Bearer $SOLOKIT_API_KEY" \
            -H "Content-Type: application/json" \
            -d '{"site_id": "site_123"}'

监控和告警

定期检查SEO状态:

# 监控脚本
import requests
import time

def check_seo_health():
    api_key = os.environ['SOLOKIT_API_KEY']
    response = requests.get(
        'https://api.solokit.com/v1/sites/health',
        headers={'Authorization': f'Bearer {api_key}'}
    )
    
    if response.status_code == 200:
        data = response.json()
        if data['health_score'] < 70:
            send_alert(f"SEO健康度下降: {data['health_score']}")

# 每小时检查一次
while True:
    check_seo_health()
    time.sleep(3600)

批量操作

批量导入数据:

const apiKey = process.env.SOLOKIT_API_KEY;

async function batchImportKeywords(keywords) {
  const response = await fetch('https://api.solokit.com/v1/keywords/batch', {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${apiKey}`,
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({ keywords })
  });
  
  return await response.json();
}

// 导入关键词
const keywords = [
  { keyword: 'SEO工具', language: 'zh', search_volume: 10000 },
  { keyword: 'SEO优化', language: 'zh', search_volume: 8000 }
];

batchImportKeywords(keywords).then(result => {
  console.log('Import result:', result);
});

数据同步

与其他系统同步数据:

// 从Solokit同步到内部系统
async function syncSEOData() {
  // 获取SEO报告
  const reports = await fetch('https://api.solokit.com/v1/reports', {
    headers: { 'Authorization': `Bearer ${apiKey}` }
  }).then(r => r.json());
  
  // 同步到内部数据库
  for (const report of reports) {
    await saveToInternalDB(report);
  }
  
  console.log(`Synced ${reports.length} reports`);
}

// 每天同步一次
setInterval(syncSEOData, 24 * 60 * 60 * 1000);

配额和限制

密钥数量限制

根据订阅套餐:

套餐密钥数量
免费版2个
基础版5个
专业版20个
企业版无限制

速率限制

根据密钥权限和套餐:

密钥类型免费版基础版专业版企业版
Read100/小时1,000/小时5,000/小时10,000/小时
Write50/小时500/小时2,500/小时5,000/小时
Full不可用500/小时2,500/小时10,000/小时

超过限制后需要等待一个小时才能继续调用。

常见问题

如何找回丢失的API密钥?

无法找回。出于安全考虑,系统不存储完整密钥。如果丢失:

  1. 吊销丢失的密钥
  2. 创建新的密钥
  3. 在应用中更新密钥

可以共享API密钥吗?

不建议。每个应用或用户应该有独立的密钥,这样:

  • 更容易追踪使用情况
  • 可以独立管理权限
  • 出问题时影响范围小
  • 人员变动时易于处理

密钥被限流了怎么办?

如果遇到429错误:

  1. 等待重试 - 响应头中有Retry-After时间
  2. 优化请求 - 减少不必要的API调用
  3. 实施缓存 - 缓存常用数据
  4. 升级套餐 - 获得更高的速率限制

如何在团队中管理密钥?

推荐做法:

  1. 使用密钥管理服务(如AWS Secrets Manager)
  2. 按项目/环境创建不同的密钥
  3. 文档化每个密钥的用途
  4. 定期审查和轮换密钥
  5. 人员变动时及时更新

相关资源

下一步

  • 了解 自动化 设置自动化任务
  • 管理 团队 配置团队 API 访问