不创建消费者的 Kong 和 JWT

Kong and JWT without creating consumers

我目前正在使用 Kong API 网关,我想用它来验证网关上的用户身份验证,并在用户未正确登录时限制对服务的访问。 我有一个身份验证服务,每当用户登录时都会发出 JWT。

我现在想与 Kong 共享 JWT 秘密,并将其用于验证已发布的 JWT,以保护需要适当身份验证的服务。

我看过这个插件:https://getkong.org/plugins/jwt/

但似乎这个插件的工作方式与我想要实现的有点不同。为什么我要创建消费者?我想在我的身份验证服务中只有一个用户数据库以避免同步的需要。这个插件的方法似乎是为了让第 3 方利益相关者访问我的 API.

如有任何提示,我们将不胜感激。

在我看来,Kong 的 JWT 插件设计不想与您共享 JWT 秘密 - 它想要完全拥有 JWT。您确实需要为每个用户创建一个消费者,并让 Kong 管理它。

我在 Google 组上问了几个问题以确认 - 请参阅 https://groups.google.com/forum/?fromgroups#!topic/konglayer/XHnVEGoxZqo

两大亮点:

Can you just confirm that it should be OK to make one consumer and one credential per user?

不仅可以,而且还是推荐的方式:)

Will Kong be happy to have two million consumers of a single api? What about 200 million?

从技术上讲,这应该不是问题,我建议设置一个 POC,您可以在其中试验更多的用户,以优化 Kong 和数据存储之间的连接,并确保我们正确调整一切.

Riley 给出的答案在实现上是正确的,但这不是 Kong 消费者的预期用途。

kong 中的消费者是正在使用 API 的应用程序。因此,除非您有多个供应商使用您的 app/web 服务,否则我建议您创建一个消费者。

您可以为该消费者创建多个密钥和秘密对(JWT 凭据)。使用用户密钥和密码为用户创建 JWT。将此密钥和机密与您的用户 ID 和其他详细信息一起存储在您当前的数据库中。使用这些和 return 用户的 JWT 创建您的 JWT。

您可以在创建 JWT 时将您想要附加为声明的任何其他内容添加到 JWT 中。您可以在 Kong 中为这些声明创建支票。因此,当您接到任何 API 的电话以及这些 JWT Kong 时,Kong 将检查 JWT 的有效性(以及所有声明),然后才允许访问 API。

您实际上可以在创建时将秘密传递给 JWT 插件:

$ curl -X POST http://kong:8001/consumers/${consumer_id}/jwt \ -H "Content-Type: application/x-www-form-urlencoded" \ --data "secret=mysecret&consumer_id=${consumer_id}"