没有创建消费者的 Kong 和 JWT

Posted

技术标签:

【中文标题】没有创建消费者的 Kong 和 JWT【英文标题】:Kong and JWT without creating consumers 【发布时间】:2016-07-03 18:29:16 【问题描述】:

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

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

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

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

任何提示将不胜感激。

【问题讨论】:

您对此有什么见解吗?我也是这个位置 不幸的是还没有,我也尝试通过 gitter 联系来自 kong 的人,但没有成功。如果我发现了什么,我会在这里回复你。 @Magnus 您能否按照 cmets 的建议更改正确答案的选择? Pranjal Aneja 的答案应标记为正确。 【参考方案1】:

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

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

两个亮点:

您能否确认可以为每个用户创建一个消费者和一个凭据?

不仅没关系,而且这是推荐的方式:)

Kong 会乐于拥有 200 万消费者使用一个 API 吗? 2亿呢?

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

【讨论】:

【参考方案2】:

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

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

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

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

【讨论】:

Kong 文档似乎与您相矛盾“考虑消费者的最简单方法是将它们一对一地映射到用户。然而,对于 Kong 这并不重要。消费者的核心原则是您可以将插件附加到它们,从而自定义请求行为。因此,您可能有移动应用程序,并为每个应用程序或它的版本定义一个消费者。或者每个平台都有一个消费者,例如 android 消费者,ios 消费者,等等。” getkong.org/docs/0.11.x/auth/#consumers 我认为这些文档是为 mashape.com 的用户编写的 - 设置将调用 API 的服务的用户,而不是在您的网站上注册以使用您的服务的用户'重新制作。我同意这应该被标记为正确答案【参考方案3】:

您实际上可以在创建 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"

【讨论】:

以上是关于没有创建消费者的 Kong 和 JWT的主要内容,如果未能解决你的问题,请参考以下文章

Kong 如何在 NGINX 和 OpenResty 上工作

Kong保护Admin API接口

JWT 密钥 - 非对称和对称

Kong入门指南 - 通过代理缓存提高性能

Kong入门指南 - 通过代理缓存提高性能

10.Kong入门与实战 基于Nginx和OpenResty的云原生微服务网关 --- 内置插件