用户注册+与kong集成的微服务的身份验证

问题描述 投票:1回答:1

我正在开发基于node.js微服务的应用程序。开发了各个微服务,包括已经处理认证,授权和注册过程的微服务。我正在审查使用kong作为api网关,但我正在寻找清楚如何通过kong处理身份验证等,但仍然使用我已创建的用户服务,已经有一个与之关联的数据库。

理想情况下,我更愿意,如果我可以将身份验证信息传递给用户服务以验证用户的登录凭据(用户名和密码),并且在认证成功的情况下让kong生成jwt令牌。

这有可能与kong或我必须以某种方式将所有这些功能移动到kong,身份验证,授权和注册?

更新

我发现以下文章概述了使用自定义身份验证服务器的方法,但这似乎非常复杂:Custom Authentication Service in Kong API Gateway

简而言之,我希望用户将用户名/密码组合传递给kong,kong会以某种方式将上游传递给我已经拥有的用户服务的端点。然后,这将验证用户并确认或拒绝用户/传递是正确的。从这一点来说,kong会生成jwt并返回给用户。如果这是可能的话会很棒。如果我有一个可以工作的自定义授权服务,但绝对不是首选。:-)

node.js authentication jwt kong
1个回答
3
投票

所以,我想在几个地方积极使用Kong,我建议您使用JWT,使用Kong的JWT插件,或者使用OAuth2插件,但两者的结合是(据我所知) )实际上不可能与孔。但是,请耐心等待一段时间。

Using JWTs

对于您的情况,使用JWT可能是一个相当简单的解决方案。我在你的假设中看到的唯一误解是,Kong实际上可以帮助你制作JWT令牌,但实际情况并非如此。 Kong只能验证JWT,但不能制作它们;这必须由您自己的授权服务完成。然后,再次,您希望如何将令牌传递给消费服务再次取决于服务的类型。

在这里,您可能希望使用OAuth2流程,例如如果您的客户是SPA或其他一些授权(例如资源所有者密码授予),则隐式授予,但在这两种情况下,Kong都不会帮助您实施它。您需要自己实现/authorize(用于隐式授权)或/token端点(用于资源所有者密码授权)。再一次:Kong将只验证您制作的JWT,而不是制作令牌。实现这些终点并不是很困难,但需要阅读RFC 6749(值得付出努力)。

在制作令牌时,请查看Kong对JWT的期望,特别是有关iss声明的文件,该声明必须与API定义中的某个属性相匹配。您可以手动为API检索,也可以使用Kong Admin API来执行此操作(端口8001)。前者更容易,后者需要一些编码,但更可靠和灵活。

Using the OAuth2 Plugin

您在其他问题中找到的solution outline提供了一个不同的解决方案,您实际上实现了一个真正的OAuth2授权服务器,并使用了Kong OAuth2插件。

这真的需要深入研究OAuth2规范,并且也很清楚Kong如何做到这一点(这有点特别)。我在该问题中提供的答案概述了必要的步骤。

Common properties of the solutions

使用这两种解决方案,您可以获得Kong验证对API调用的好处,并且只允许使用有效令牌的呼叫通过。 JWT选项允许您制作令牌,并且还需要您的API后端实现来检查令牌并获取它需要的声明,例如来自JWT令牌的“用户ID”或“范围”。 Kong不会为你做这项工作,只会验证JWT令牌是否正确签名。

第二个选项将更多内容卸载到Kong,在授权用户时,您可以在不透明令牌中添加X-Authenticated-UserId和(可选)X-Authenticated-Scope,而后者又通过标头调用后端API。这意味着您的API不需要在将令牌分开时进行任何额外的工作 - 这些信息可通过Kong注入的额外标头轻松获得。

希望这有助于澄清香港能做什么和不能做什么(至少目前)。

© www.soinside.com 2019 - 2024. All rights reserved.