使用 JWT 保护 Rest API

Securing Rest APIs with JWT

我正在尝试使用 JWT 保护其余 API 端点。我看了几个相关的问题 and

我在 JWT 中有一些敏感信息,但我使用的是 HTTPS,所以数据已经加密,这样就足够了吗,还是我必须加密 JWT?

HTTPS 为您提供传输加密。这意味着如果有人拦截了您的消息,他们将无法阅读。但是安全连接由浏览器(在用户端)终止,并且通常由服务器端的负载平衡器或 API 网关终止。这意味着 JWT 将免费提供给任何有权访问浏览器的人。也有可能从您的网络内部读取或窃取它(一旦它通过 Gateway/load 平衡器)。这个威胁要小得多,但它仍然存在。

如果您的 JWT 中有敏感信息,那么有两种选择:

  1. 您可以加​​密 JWT(所以使用 JWE)。这样令牌的内容在浏览器中是安全的。即使有人在那里读取或拦截令牌,他们也无法读取它。不过,JWE 的设置有点棘手。

  2. 使用 Phantom Token 模式。在此模式中,您向客户端发出不透明令牌,并让您的 API 网关将不透明令牌交换为 JWT。通过这种方式,您的敏感信息将远离浏览器,但您的 API 仍然可以受益于 JWT 的强大功能。它也不需要设置加密。它使您容易受到网络内任何恶意行为者(来自您的组织或设法突破您的防御的人)的攻击,但这种风险要低得多。