我目前正在使用Kong API Gateway,我想用它来验证网关用户的身份验证,并在用户未正确登录时限制对服务的访问。 我有一个身份验证服务,只要用户登录就会发出JWT。
我现在想与Kong分享JWT秘密并将其用于验证已发布的JWT,以保护需要适当身份验证的服务。
我看了一下这个插件:https://getkong.org/plugins/jwt/
但似乎这个插件的工作方式与我想要实现的有点不同。为什么我要创建消费者?我希望在我的身份验证服务中只有一个用户数据库,以避免需要同步。看来这个插件的方法是为了让第三方利益相关者访问我的API。
任何提示都会受到高度赞赏。
答案 0 :(得分:13)
Riley给出的答案在实施中是正确的,但这不是香港消费者的预期用途。
kong中的消费者是使用API的应用程序。因此,除非您有多个供应商使用您的应用/网络服务,否则我建议您创建一个消费者。
您可以为该使用者创建多个密钥和密钥对(JWT凭据)。使用用户密钥和密钥为用户创建JWT。将此密钥和密钥与您的userID和其他详细信息一起存储在当前数据库中。使用这些创建JWT并将JWT返回给用户。
您要添加的任何其他内容作为声明可以在创建时添加到JWT。您可以在Kong中为这些索赔创建支票。因此,当您接到任何API的呼叫以及这些JWT Kong时,将检查JWT的有效性(以及所有声明),然后才允许访问API。
答案 1 :(得分:8)
在我看来,Kong的JWT插件的设计并不想与你分享JWT秘密 - 它想要完全拥有JWT。你确实必须为每个用户创建一个消费者,让Kong管理它。
我在Google小组上提出了几个要确认的问题 - 请参阅https://groups.google.com/forum/?fromgroups#!topic/konglayer/XHnVEGoxZqo
两个亮点:
您能否确认每个用户创建一个消费者和一个凭证应该可以吗?
不仅如此,但这是推荐的方式:)
和
Kong会很乐意拥有200万单一api的消费者吗?那2亿多呢?
从技术上讲,这应该不是问题,我建议您设置一个POC,您可以尝试更多的用户,以优化Kong和数据存储之间的连接,并确保我们正确调整所有内容。< / p>
答案 2 :(得分:1)
您可以在创建JWT插件时将其秘密传递给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}"