什么是 API 访问密钥?
API 密钥(api-key)类似于密码,用于保护 API(应用程序编程接口)。它是一个唯一的标识符,用于验证请求 API 的应用程序或用户的身份。API 密钥通常是一串随机生成的字符(包括数字、字母和符号),并与调用者的帐户相关联。
API 密钥的原理是什么?
API 密钥的鉴权通常在项目的网关(Gateway)部分进行。当网关接收到 API 请求时,会根据请求中携带的 API 密钥信息进行鉴权,检查该密钥是否有效或是否有权限访问该 API。如果鉴权失败,网关将返回错误信息;如果鉴权成功,则继续处理请求。
为什么需要 API 密钥?
由于 API 调用接口在互联网上对所有人公开,任何人都可以向服务发出 API 请求,这种公开性存在一定的风险。
例如,如果 API 接口没有 API 密钥保护,它可能会遭受 DDoS 攻击。攻击者可能利用自动化手段攻击服务器某个接口,导致服务器崩溃或产生巨额账单,尤其是对托管服务如 AWS 或 Google Cloud 造成损失。
解决方案是使用 API 密钥。除了执行用户身份验证外,API 密钥还增强了应用的安全性,通过控制密钥的访问权限来限制接口的功能。例如,可以将 API 的使用限制为只读功能,以防止数据被写入。如下图所示,GitHub 通过 API 密钥来控制可以访问的内容:
如何添加 API 密钥
需要注意的是,API 密钥的安全性不如 OAuth2 等身份验证令牌高,但可以将两者组合使用,以增强安全性。API 安全和身份验证是专门的领域,此处不作详细讨论。
我们可以通过多种方式包含 API 密钥:
- 将其作为 URL 中的参数或查询字符串传递。例如:
https://api.example.com/data?key=12345
- 将其
Authorization
作为键/值对包含在请求标头的字段中。
总结
一旦拥有 API 密钥,就可以使用任何工具进行 API 调用,或者使用所选编程语言的 API 服务提供商提供的官方 SDK。API 在各类技术中广泛存在,支持的不仅仅是网站和 iOS/Android 应用程序,甚至可能包括智能咖啡机等设备。