微服务方法之间的身份验证

标签 authentication jwt microservices

我目前正在构建一个基于微服务架构的 API。
我正在使用 JWT 对用户进行身份验证。我了解当用户发送登录请求时,会返回包含用户身份及其角色/权限等的 JWT。然后将此 token 与用户后续请求一起发送,以告诉服务器谁正在发送请求。我认为这是正确的理解。
在正常的单片架构中,这正如解释的那样工作得很好。如何将其转移到微服务架构中以在微服务之间建立信任。
我可以简单地将用户 JWT 转发到下游微服务,但这不允许下游微服务知道谁/哪个上游微服务正在发送请求。
一个例子是我有一个位置微服务。我想让餐厅微服务调用位置微服务。但是我也有一个产品微服务,我不想调用位置微服务。
显然我不能编写产品微服务来调用位置微服务,但这并不能阻止其他人这样做。
有什么建议么?

最佳答案

在这里,您有两个不同的问题需要解决!

1) 用户认证/授权:

您的下游服务服务应将用户 JWT token 传递给上游服务(下游取决于上游,下游更靠近前端)。这样所有服务都可以验证 JWT token ,并且我们可以保证 token 不变。

2)微服务授权:

这是您拥有的第二种情况,您需要保证微服务之间的信任关系和访问资源的授权。在这种情况下,您是否拥有微服务应该是客户端(充当用户)、身份验证服务( key 斗篷、身份验证服务...),并且在向任何上游依赖项发送请求之前,应该对其进行身份验证,然后发送他的拥有 JWT token ,这样目标微服务(被调用者)可以验证并允许或不允许调用者访问资源,然后检查最终用户凭据。

这种方法可以使用客户端凭据自动化流程 (https://oauth.net/2/grant-types/client-credentials) 来实现。

见这篇文章:https://developer.okta.com/blog/2018/04/02/client-creds-with-spring-boot

关于微服务方法之间的身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45616764/

相关文章:

python - Django,在哪里更新失败的登录尝试以及为什么?

python - 当用户通过身份验证时运行 Django QuerySet

microservices - Zuul转发错误,负载均衡器没有可供客户端使用的服务器

wpf - WPF 中的身份验证和角色

php - 可以使用拇指扫描仪登录 Web 应用程序吗?

php - 如何在 CodeIgniter 3.x 中针对来自客户端的每个请求验证 JWT token

javascript - 如何在 JavaScript 中验证和解码由 asp.net Web-Api 创建的 JWT

jwt - 如何在asp.net core 2.0中允许多个具有不同发行者的JWT

events - 每个微服务的 CQRS 事件源和自己的数据库

java - 在测试范围内验证微服务有多糟糕? [Java]