Logo Logo
GitHub Designed by Logto

什么是 API 密钥?

API 密钥用于识别和授权调用的应用程序或服务。它们通常是长期有效且静态的,直到被轮换,并且通常具有一组固定的权限。它们主要用于服务器到服务器的通信或访问公共数据,这些令牌通常不代表特定用户。

API 密钥如何工作?

API 密钥是由 API 提供者生成并与授权用户共享的一长串字符。在访问 API 时,必须将此密钥包含在请求头中。API 密钥对于基本的安全需求来说简单而有效。例如,像 Google Maps API 和 AWS 这样的流行服务提供 API 密钥来控制访问和监控使用情况。

curl -GET https://api.example.com/endpoint -H "Authorization: api-key YOUR_API_KEY"

API 密钥不如其他形式的 API 认证(如 OAuth 2.0 JSON Web Token (JWT) )有效,但它们在帮助 API 生产者监控使用情况方面仍然发挥着重要作用,因为这是保护 API 的最简单和广泛使用的方法。

它的优缺点是什么?

优点

  • 实现简单:API 密钥易于实现和使用。它们涉及将密钥附加到请求头,使其成为开发人员和客户端易于理解和使用的方法。
  • 易于监控:API 密钥易于监控。你可以跟踪每个密钥的使用情况,并在必要时撤销它们。
  • 有效的速率限制:API 密钥对于速率限制是有效的。你可以为每个密钥设置请求数量限制以防止滥用。
  • 适用于非敏感数据:API 密钥适用于非敏感数据或公开可用的 API,安全要求较低。

缺点

  • 安全性有限:API 密钥对于敏感数据来说不够安全,尤其是对于客户端应用程序。它们通常用于机器到机器的通信。
  • 不适用于用户认证 (Authentication):API 密钥绑定到应用程序或系统,而不是个人用户,这使得识别特定用户或跟踪其操作变得具有挑战性。
  • 无令牌过期:API 密钥通常是静态的且不会过期。如果密钥被泄露,可能会被无限期滥用,除非手动重新生成。

API 密钥的使用场景是什么?

  • 服务到服务的通信:API 密钥适用于应用程序需要通过 CLI 直接与 API 通信的场景。例如,调用 OpenAI API。
  • 公共 API:在向公众公开 API 时,API 密钥提供了一种简单的访问控制方法。
  • 简化设置:对于快速和简单的认证需求,尤其是在开发阶段。与机器到机器认证不同,API 密钥不需要事先注册客户端,也不需要交换访问令牌。你只需在请求中将 API 密钥作为参数传递即可。

在实际场景中,构建产品时最常见的目的是产品集成。以下是一个典型的使用案例:

示例:与 Stripe 集成

Stripe 使用 API 密钥与不同平台和应用程序进行安全集成。你可以通过开发者仪表板创建、查看、删除和管理这些密钥。通过使用 API 密钥,你可以将 Stripe 的结账和计费功能集成到你的产品中。

Stripe-integration-API keys.png

个人访问令牌 (PAT) 和机器到机器 (M2M) 有什么区别?

在谈论 API 密钥时,个人访问令牌和 机器对机器 (Machine-to-machine) 也可以一起提到,因为它们都可以通过 CLI 命令以编程方式访问 API 资源,或在后端服务之间建立通信。

个人访问令牌 (PATs)

个人访问令牌也是一个字符串,但它代表特定用户的身份和权限,在成功认证或登录后动态生成,通常具有有限的生命周期,但可以刷新。它提供对用户特定数据和功能的细粒度访问控制,通常用于 CLI 工具、脚本或个人 API 访问。主要区别在于它更具体,并用于用户特定的操作。

机器到机器 (M2M)

M2M 通信是指设备在更广泛的意义上自动交换数据而无需人工参与。

OpenID Connect (OIDC) (或 OAuth 2.0 )的上下文中,M2M 应用程序使用 客户端凭证流 (Client credentials flow) ,如 OAuth 2.0 RFC 6749 协议 中定义的,支持类似的标准协议。它通常涉及客户端应用程序(机器或服务)自行或代表用户访问资源。它非常适合只有受信任的客户端可以访问后端服务的情况。

另请参阅