使用带有 KONG API 网关的 cookie 的 JWT 身份验证

JWT authentication using cookies with KONG API Gateway

我们正在使用 Kong API 网关和 JWT 身份验证插件来实现示例应用程序。

如本文所述,有两种方法可以在浏览器中存储 JWT。网络存储或 cookie。但是网络存储(即 session 存储和本地存储)可能容易受到 cross-site 脚本攻击 (XSS)。所以其他选择是 cookie。 (虽然应该注意 CSRF)

我有两个问题,

  1. 如果我们使用web storage来存储JWT 那么有没有办法阻止XSS。如果是,那么如果在新选项卡中打开同一页面或重新加载同一页面,它将如何工作?

  2. 使用 cookie:我们能够在请求中发送 cookie。但是只有当 JWT 设置在 headers (Authorisation: Bearer token) 并且不使用 cookie 进行身份验证时,KONG 才会对端点 URL 进行身份验证。有什么方法可以使用 KONG API 网关验证在 cookie 中设置的 JWT?

将 JWT 存储在 webStorage 中并没有错,除非您将敏感数据存储在您的 JWT 中(但您永远不应该这样做,因为您可以轻松对其进行解码)。关键是你的令牌共享一个秘密,只有你的服务器知道(这就是它安全的原因),你应该设置一个过期时间以使其更安全。

不,您不能在 cookie 中传递 JWT 令牌,它仅在 headers(这里是授权)中,我不知道 KONG API,但他们应该不允许这样做!

(关于 JWT 的参考文献是 here

为了添加到@antoine2vey 的回答,

看起来您的页面应用程序是从 Kong 中受保护的 API 在“/”(斜杠)资源处提供服务的。我建议您可以从未受保护的“/”(斜杠)资源获取页面内容,然后 运行 javascript 代码可以访问 cookie 并能够执行请求到受保护的资源,在 header 中传递 JWT 令牌,Kong 可以在其中为您进行验证。

这有意义吗?

基于 Cookie 的身份验证已实现。 https://github.com/Kong/kong/pull/2973