没有创建消费者的 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的主要内容,如果未能解决你的问题,请参考以下文章