我正在寻找Kong来取代我目前的手动NodeJS API网关。目前,我有一个用户服务,通过在登录时提供JWT来处理身份验证(用Django编写),然后客户端通过标头传入。我当前的API网关然后拦截任何调用,验证回调用户服务,并用X-User-Id
和X-User-Email
替换JWT标头。
据我所知,孔可以大致做同样的事情。我试图弄清楚这应该如何在一个完美的世界中发挥作用。我仍然有机会更换大部分基础设施,因此重写一些服务并非完全不可能。
所以,在我看来,会发生以下情况:
X-Consumer-*
替换它 - 这是正确的吗?如果我的想法错了,或者有更好的方法来实现这一点,请纠正我。我对整个微服务的事情都很陌生。
我正在进行类似的设置,这些是我目前的发现/结论:
用户注册必须是您描述的方式。
登录后我相信有两种方法可以解决这个问题:
在方案1中,您必须从kong获取jwt密钥和密钥并生成jwt令牌并使用此令牌向您的kong服务发出请求。
场景2与场景1非常相似,除了您不必为了生成jwt令牌而执行任何kong请求。
您可以向jwt令牌添加其他有效负载参数,但这些参数不会传递给您的上游服务。但是看起来这个插件似乎解决了这个问题(我还没有测试过):
https://github.com/wshirey/kong-plugin-jwt-claims-headers
Kong在授权时将来自jwt使用者的custom_id和用户名传递给上游服务,如下所示:
x-consumer-custom-id: [245]
x-consumer-username: ['my-test-user']
x-consumer-id: ['1e9e25dd-396f-4195-94fc-f2a8bd8447a2']
它还传递整个授权标头