有没有一种方法可以在不使用 APi 网关架构的情况下使用 Jwt 保护微服务端点

Posted

技术标签:

【中文标题】有没有一种方法可以在不使用 APi 网关架构的情况下使用 Jwt 保护微服务端点【英文标题】:Is there a way to secure microservice endpoints with Jwt without using an APi Gateway architecture 【发布时间】:2021-11-18 18:46:43 【问题描述】:

我正在开发一个 spring-boot 微服务应用程序、用户管理模块和特定的 AuditTrail 服务模块,我的任务是使用 jwt 和其他微服务(可以是 .net、Django 等)创建和保护端点使用此令牌来保护端点。我已经完成了用户管理系统的构建,但现在我被卡住了,因为我不知道如何在其他微服务系统上验证 jwt,并且我被指示不要使用 Api 网关架构。

我正在考虑公开其他微服务可以调用的 api/vi/auth/authenticate 端点,但我不确定是否有更好的方法。也许与其他微服务共享用于创建令牌的 jwt 秘密和算法,并且每个微服务只是自己验证一个令牌。后一种方法涉及编写样板代码,据我所知,但我不知道这些是否是我唯一的选择以及他们可能需要查看哪些缺陷是我能够管理的。

【问题讨论】:

在我看来,为authenticatingvalidatingauthorizing 公开单独的端点是最好的主意。因为这些服务可能分布在不同服务器空间的多个集群中。这样做会将这些责任移交给单个微服务(成为微服务的唯一目的)。如果我们正确地分割我们的服务,多个服务不应该一遍又一遍地做同样的事情。 【参考方案1】:

只要您使用非对称算法(例如 RSA ECDSA 等)签署 JWT,就可以让认证服务器将私钥保存到自己,并且只与服务共享公共密钥

请注意,如果您不访问服务器,您将面临令牌被撤销且服务不知道的风险 - 因此您希望令牌过期时间短

【讨论】:

【参考方案2】:

要管理微服务生态系统中的身份验证,您需要一个独立的微服务身份验证,可以是 SSO(单点登录)。最佳实践和最安全的方法是使用 Oath 和 OpenId 来实现这种方法,并且为了不从头开始发明***,您可以使用一些标准产品,例如 IdentityServer4(更复杂但功能齐全)或 OpenIdDict(更简单)还有许多其他的,它们以安全和标准的方式为您提供身份验证和授权。

他们提供了一个访问令牌,它是 JWT,有很多声明可以轻松处理您的场景。此外,他们有一个标准的 URL 地址来公开他们的 URL(例如 URL/.well-known/openid-configuration,您可以在此处查看 real 结果)。 我建议按照行业标准实施一个严肃的项目。

【讨论】:

以上是关于有没有一种方法可以在不使用 APi 网关架构的情况下使用 Jwt 保护微服务端点的主要内容,如果未能解决你的问题,请参考以下文章

如何在不使用API 的情况下访问Google课堂?

有没有一种方法可以在不使用 ANTD 上的默认按钮的情况下关闭 Modal?

如何在不打开领域文件的情况下检查我的领域架构版本?

有没有一种方法可以在不使用大量分支语句的情况下为无符号整数编写 qsort 比较函数?

如何在不使用任何支付网关的情况下验证信用卡?

jquery 或 javascript 中有没有一种方法可以在不使用 ajax 请求的情况下在页面加载时填充下拉列表?