3

我正在查看Kong来替换我现有的手动推出的NodeJS API网关。目前,我有一个用户服务,通过在登录时提供一个JWT来处理认证(用Django编写),然后客户端通过标头传入。我当前的API网关会拦截任何呼叫,执行验证呼叫回用户服务,并用X-User-IdX-User-Email取代JWT标头。使用Kong进行身份验证

据我所知,Kong可以做大致相同的事情。我试图弄清楚这应该如何工作的流程在完美的世界。我仍然有机会替换大部分基础设施,因此重写一些服务并不是完全不可能的。

所以,在我的脑海里,会发生什么样的是以下内容:我的网站上

  1. 用户注册。然后我在Kong上创建一个新用户,用户名/ ID为
  2. 用户登录。这是我卡住的地方。我是否登录(或者在这种情况下,简单地认证用户是说用户),向Kong请求JWT并返回该用户?如果我想在智威汤逊的有效载荷中添加更多数据呢?智威汤逊到期时,香港会发生什么?
  3. 当用户请求服务时,Kong会从头文件中嗅出JWT,将其替换为X-Consumer-*--是对的吗?

如果我的思维错误或者有更好的方法来实现这一点,请纠正我。我对整个微服务都很陌生。

回答

0

我工作的一个类似的设置,这些都是我的发现/结论的时刻:

用户注册必须是你所描述的方式。

登录后我相信有两种可能的方式来解决这个问题:

  1. 存储在您的用户数据库中的consumer_id,
  2. 存储在您的用户数据库中的智威汤逊密钥和密码。

在场景1中,您必须从kong获取jwt密钥和秘密,并生成一个jwt令牌并使用此令牌向您的kong服务发出请求。

场景2与场景1非常相似,除非您不必为了生成jwt令牌而对kong进行任何请求。

您可以将其他有效负载参数添加到jwt令牌,但这些参数不会传递到您的上游服务。但它似乎像这个插件可以解决这个问题(我没有测试过这还):

https://github.com/wshirey/kong-plugin-jwt-claims-headers

香港传递来自于授权的智威汤逊消费者对上游业务的custom_id和用户名,例如:

x-consumer-custom-id: [245] 
x-consumer-username: ['my-test-user'] 
x-consumer-id: ['1e9e25dd-396f-4195-94fc-f2a8bd8447a2'] 

它也传递整个授权标题