使用 API 密钥保护我的 API

Secure my API with an API key

我正在构建自己的 API,它被以下人使用:

1) Android 应用程序 2) 桌面应用

我的一个网址是这样的:http://api.chatapp.info/order_api/files/getbeers.php 我的用户通过 JSON 从我的数据库中获取数据。我最近在考虑使用 API 密钥创建身份验证。

关于如何做的任何想法?或者我是否必须执行 http://api.chatapp.info/order_api/files/getbeers.php?api_key= 之类的操作,然后将 GET 方法与存储在我的数据库中的某些密钥进行比较?

有什么想法吗?

OAuth 是一个复杂的协议,通过谷歌搜索和阅读文档可以更好地了解它,但这可能是保护 API 端点的一个不错的选择。

简而言之,OAuth 是一种让用户获得对您的 API 的访问权限的方式,方法是证明他们被允许访问,然后使用您提供的安全 "access token"。

  1. 客户端通过传递 "api-key" 和某种 "secret key" 从 API 服务器请求访问令牌。这些是在您的 API 用户注册使用您的 API.

  2. 时提供给他们的
  3. 如果从客户端传递给 API 服务器的凭据是正确的,则 API 服务器会响应 "access token"。此访问令牌在一定时间内有效,应与所有后续请求一起发送,以证明客户端已获得使用 API.

  4. 的访问权限
  5. 客户端向您的 API 服务器发出 API 数据请求,并且必须包含 "access token"。如果包含 "access token" 并且仍然有效(即尚未过期),那么您可以使用他们请求的数据进行响应。

这里有一些资源链接,可帮助您了解如何在 API 中实施 OAuth。

OAuth Docs

http://scottksmith.com/blog/2014/07/02/beer-locker-building-a-restful-api-with-node-oauth2-server/ http://www.devx.com/webdev/create-your-own-rest-api-using-oauth-authentication.html

请参阅 this link 比较 OAuth 1.0 和 OAuth 2.0,以确定哪种更适合您的情况。

如果您需要对用户进行身份验证,那么我会选择 Oauth。如果不是,则将请求参数的加密校验和添加到自定义请求 header.

正如@mike 提到的,OAuth 很复杂 API,更重要的是需要第三个服务端点 运行 在某处提供 authentication/authorization 访问。

一个人认为您肯定不想做的是在 URL 中包含 API 键。这很容易重播 and/or 被代理欺骗和识别并在日志文件中捕获。更好的解决方案是在您的请求中包含 API 密钥作为附加 HTTP header,并在您的 API 端点中查找该特定值。

对于像您建议的简单用例,您可能会发现使用您作为 Android 应用程序和API 端点。如果你走这条路,它不容易改变,如果受到损害意味着一个真正的 PITA 来启用和就位新密钥。

如果您使用 "shared secret",那么我建议让用户相对容易地(或至少有一些 UI)更新该密钥,以防它被泄露。我假设您可以相当轻松地更新您的网络服务。此过程不如 OAuth 或 OAuth2 安全,但实施起来绝对更简单、更快速,同时仍提供合理的 "security" 级别(在这种情况下,安全性意味着 "you're allowed to access this API")。