为何及何时使用 API 密钥

本页面提供了一些与 API 密钥和身份验证有关的背景信息:它们各自的使用方式、两者之间的区别以及应考虑使用 API 密钥的场景。

API 密钥用于识别项目,身份验证用于识别用户

Cloud Endpoints 同时支持 API 密钥和身份验证(例如 Firebase 或 Auth0)这两种方案。两者之间的主要区别如下:

  • API 密钥用于识别正在调用 API 的调用方项目(应用或网站)。

  • 身份验证令牌用于识别正在使用应用或网站的用户(人员)。

    API 密钥概览

API 密钥提供项目授权

为了确定哪种方案最合适,您必须了解 API 密钥和身份验证有哪些用途。

API 密钥的用途如下:

  • 项目识别 - 识别正在调用相应 API 的应用或项目

  • 项目授权 - 检查调用方应用是否拥有调用 API 的权限,以及是否已在其项目中启用 API

API 密钥的安全性不如身份验证令牌(请参阅 API 密钥的安全性),但它们可以识别调用 API 的应用或项目。它们是在发出调用的项目生成的,您可以限制其使用范围,如 IP 地址范围或者 Android 或 iOS 应用。

通过识别调用方项目,您可以使用 API 密钥关联使用信息与相应项目。 借助 API 密钥,Extensible Service Proxy (ESP) 可以拒绝尚未获得访问权限或尚未启用 API 的项目发出的调用请求。

用户身份验证

相比之下,身份验证方案通常有两个用途:

  • 用户身份验证 - 安全地验证调用方用户的真实身份是否与宣称的一致。

  • 用户授权 - 检查用户是否应具备发出此请求的权限。

身份验证机制提供了一种安全识别调用方用户的方式。 Endpoints 还会检查身份验证令牌,以验证其是否有权调用 API。然后,API 服务器会根据该身份验证的结果决定是否向请求授权。

如果您需要能够识别正在进行调用的用户,请参阅对用户进行身份验证

虽然 API 密钥可识别调用方项目,但无法识别调用方用户。例如,如果您创建了一个调用 API 的应用,那么可以使用 API 密钥来识别正在进行调用的应用,但无法使用它识别正在使用该应用的人员的身份。

如果您需要一种更安全的方法来限制哪些项目或服务可以调用您的 API,请参阅服务之间的身份验证

API 密钥的安全性

人们普遍认为 API 密钥是不安全的;由于客户端通常可以访问 API 密钥,因此 API 密钥很容易被他人窃取。密钥被窃取后,由于没有到期时间,因此可以无限期地使用,除非项目所有者撤消密钥或重新生成密钥。虽然您可以对 API 密钥设置限制以缓解此问题,但也可以考虑使用更好的授权方法。

如需查看示例,请参阅对用户进行身份验证

何时使用 API 密钥

API 可以将其部分或所有方法限制为要求提供 API 密钥。以下情况适合采用这种做法:

  • 您确实希望屏蔽匿名流量。如果应用开发者需要与 API 提供方合作调试某个问题或显示其应用的使用情况,那么可以使用 API 密钥来识别 API 提供方的应用流量。

  • 您希望控制 API 调用的次数。

  • 您希望识别 API 流量中的使用模式。您可以在 API 和服务中查看应用的使用情况。

  • 您希望按 API 密钥过滤日志。

API 密钥不能用于:

  • 识别具体用户(API 密钥无法用于识别用户,只能用于识别项目)。

  • 安全授权。

  • 识别项目的创建者。

Service Infrastructure 不提供直接通过 API 密钥查找项目的方法。

如何使用 API 密钥

如需了解如何设置和使用 API 密钥访问权限,请参阅使用 API 密钥限制访问权限