使用Kong进行身份验证
问题描述:
我正在查看Kong来替换我现有的手动推出的NodeJS API网关。目前,我有一个用户服务,通过在登录时提供一个JWT来处理认证(用Django编写),然后客户端通过标头传入。我当前的API网关会拦截任何呼叫,执行验证呼叫回用户服务,并用X-User-Id
和X-User-Email
取代JWT标头。使用Kong进行身份验证
据我所知,Kong可以做大致相同的事情。我试图弄清楚这应该如何工作的流程在完美的世界。我仍然有机会替换大部分基础设施,因此重写一些服务并不是完全不可能的。
所以,在我的脑海里,会发生什么样的是以下内容:我的网站上
- 用户注册。然后我在Kong上创建一个新用户,用户名/ ID为
- 用户登录。这是我卡住的地方。我是否登录(或者在这种情况下,简单地认证用户是说用户),向Kong请求JWT并返回该用户?如果我想在智威汤逊的有效载荷中添加更多数据呢?智威汤逊到期时,香港会发生什么?
- 当用户请求服务时,Kong会从头文件中嗅出JWT,将其替换为
X-Consumer-*
--是对的吗?
如果我的思维错误或者有更好的方法来实现这一点,请纠正我。我对整个微服务都很陌生。
答
我工作的一个类似的设置,这些都是我的发现/结论的时刻:
用户注册必须是你所描述的方式。
登录后我相信有两种可能的方式来解决这个问题:
- 存储在您的用户数据库中的consumer_id,
- 存储在您的用户数据库中的智威汤逊密钥和密码。
在场景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']
它也传递整个授权标题