如何使用 API 密钥保护 REST API

How to Secure REST API with API Keys

我的架构由一个前端服务器和一个 backend/API 服务器组成。最终用户可以访问 API,但是我希望前端服务器能够访问最终用户无法访问的 API 的某些路由(更高权限)。

这个问题有两部分:

(1) 我需要为最终用户使用 API 键。这样做的最佳做法是什么?

(2) 前端如何打入API关键系统?客户需要登录到他们的帐户才能访问前端提供的这些提升的权限。 (例如启用 webhooks)

我的应用程序托管在 Google Cloud App Engine Standard env 上,我使用的是 node.js 10。如果有人对此架构有任何建议,那就太好了。

我知道这个问题有点笼统,但我花了几个小时在网上四处看看,我的问题不是如何使用 API 密钥,也不是如何验证前端,而是:将这两者结合起来的最佳做法是什么?

谢谢, 尼基塔

JWT (https://jwt.io/introduction/) 可以提供帮助。您可以在请求 header 中包含 API 密钥和 JWT。有些服务接受 API 密钥作为 URL 参数,但将此类敏感数据放入 header 是更好的方法。

JWT 可以在用户进行身份验证时存储在 cookie 中,并可以随请求传输到服务器。

服务器可以使用 API 密钥来验证和解码这个 JWT,使用服务器环境中可用的密钥来授权访问,因为解码这个 JWT 可以揭示用户的类型,因此帮助确定什么级别需要访问权限。

一种 straight-forward 方法与多种变体一起使用。您可以从基本版本开始,然后逐步添加 layers/features。