是否需要对可公开访问的 REST API 进行身份验证 - 仅获取

Is there any need for authentication for a publicly accessible REST API - GET only

我使用 Lumen 构建了一个微型 API,它只有一个单一的 GET 方法,returns JSON 来自数据库的数据。

我添加了一个简单的中间件,强制 GET 请求在 URL 中包含“?key=[secretPassword]”,因此只有我提供密钥的人才能执行 GET。

这是我的第一个 API - 这些安全措施是否足够?

编辑更多信息: 数据不敏感,我不在乎是否有人找到它,但我将把密钥移到 headers 中以获得额外保护,并且我正在使用 HTTPS。

I added a simple middleware that forces the GET request to have "?key=[secretPassword]" in the URL so only people I give the key can perform the GET.

很难给出一个完整的答案,因为有一些未知数,但我试一试。

关于这种方法的一些说明:

  • 通常不建议将机密放在 url 中,因为 url 最终会出现在缓存和日志中。
  • 您绝对需要 HTTPS。如果没有 HTTPS,其他人可以监听 HTTP 请求和响应。
  • 您将如何获得 end-users 的密钥?您有安全的方式将其发送给他们吗?
  • 您如何随机创建密钥?有很多不好的方法可以做到这一点。

标题中你还问这个:

Is there any need for authentication for a publicly accessible REST API

嗯...取决于您要保护自己免受什么侵害?是否有人可以调用 API 有关系吗?那么你可能不需要授权。

在 URL 上设置密码会泄露密码,即使在 HTTPS 流量上也是如此。请改用授权 header。

如果开销不是太大,您可以在 API 前面设置一个 API 网关(Kong、Tyk、ApiGee 等),这样您就可以灵活地处理任何身份验证的类型,或者就此而言更及时。

通常根据信息的敏感性或业务案例,GET API 有时也会保持打开状态..