跳转到主要内容

概述

KillB API 使用 JWT(JSON Web Tokens) 进行身份验证。所有 API 请求必须在 Authorization 标头中包含有效的访问令牌。
API 身份验证使用 电子邮件/密码 登录和 API 密钥 的组合,用于不同的访问模式。

身份验证方法

用于大多数 API 操作。通过登录端点获取。最适合: Web 和移动应用程序、用户特定操作

获取您的凭证

  1. https://otc.killb.com/auth/jwt/register 注册 KillB 账户
  2. otc.killb.com 访问门户
  3. 获取凭证:
    • 您的登录电子邮件和密码
    • 从门户设置中获取您的 API 密钥

登录流程

步骤 1:生成访问令牌

POST /api/v2/auth/login
请求:
{
  "email": "[email protected]",
  "password": "your-password"
}
响应:
{
  "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
  "expiresIn": 3600000,
  "refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
curl --request POST \
  --url https://teste-94u93qnn.uc.gateway.dev/api/v2/auth/login \
  --header 'Content-Type: application/json' \
  --data '{
    "email": "[email protected]",
    "password": "your-password"
  }'

步骤 2:使用访问令牌

在所有 API 请求的 Authorization 标头中包含访问令牌:
Authorization: Bearer YOUR_ACCESS_TOKEN
示例请求:
curl --request GET \
  --url https://teste-94u93qnn.uc.gateway.dev/api/v2/users \
  --header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...'

刷新令牌

访问令牌在 1 小时后过期。使用刷新令牌获取新的访问令牌:
POST /api/v2/auth/refresh
请求:
{
  "refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
响应:
{
  "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
  "refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
  "expiresIn": 3600000
}
async function refreshAccessToken(refreshToken) {
  const response = await fetch('https://teste-94u93qnn.uc.gateway.dev/api/v2/auth/refresh', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
    },
    body: JSON.stringify({ refreshToken })
  });
  
  const data = await response.json();
  return data.accessToken;
}
在您的应用程序中实现自动令牌刷新,以保持不间断的 API 访问。

安全最佳实践

  • 永远不要将凭证提交到版本控制
  • 使用环境变量存储 API 密钥和令牌
  • 定期轮换 API 密钥
  • 使用密钥管理服务(AWS Secrets Manager、HashiCorp Vault 等)
  • 安全存储令牌(加密存储、安全 cookie)
  • 实现自动令牌刷新
  • 注销时清除令牌
  • 设置适当的令牌过期时间
  • 始终对 API 请求使用 HTTPS
  • 为移动应用实现证书固定
  • 验证 SSL 证书
  • 使用安全网络连接
  • 不要向最终用户暴露身份验证错误
  • 记录身份验证失败以进行监控
  • 对登录尝试实施速率限制
  • 优雅地处理令牌过期

身份验证错误

常见的身份验证错误响应:
状态代码错误描述
401未授权无效或过期的令牌
403禁止有效令牌但权限不足
400错误请求无效的凭证格式
示例错误响应:
{
  "errorCode": "AUTH.0001",
  "message": ["Invalid credentials"],
  "statusCode": "401"
}

测试身份验证

使用沙盒环境测试身份验证: 沙盒 URL: https://teste-94u93qnn.uc.gateway.dev
为沙盒测试创建单独的测试账户。沙盒凭证在生产环境中不起作用。

示例:完整的身份验证流程

这是一个管理身份验证状态的完整示例:
class KillBAuth {
  constructor(email, password) {
    this.email = email;
    this.password = password;
    this.accessToken = null;
    this.refreshToken = null;
    this.baseUrl = 'https://teste-94u93qnn.uc.gateway.dev';
  }

  async login() {
    const response = await fetch(`${this.baseUrl}/api/v2/auth/login`, {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({
        email: this.email,
        password: this.password
      })
    });

    const data = await response.json();
    this.accessToken = data.accessToken;
    this.refreshToken = data.refreshToken;
    return data;
  }

  async refresh() {
    const response = await fetch(`${this.baseUrl}/api/v2/auth/refresh`, {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({
        refreshToken: this.refreshToken
      })
    });

    const data = await response.json();
    this.accessToken = data.accessToken;
    this.refreshToken = data.refreshToken;
    return data;
  }

  getAuthHeaders() {
    return {
      'Authorization': `Bearer ${this.accessToken}`,
      'Content-Type': 'application/json'
    };
  }
}

// Usage
const auth = new KillBAuth('[email protected]', 'your-password');
await auth.login();

// Make authenticated request
const response = await fetch(`${auth.baseUrl}/api/v2/users`, {
  headers: auth.getAuthHeaders()
});

下一步