【问题标题】:Adding JWT to Spring Boot Microservices将 JWT 添加到 Spring Boot 微服务
【发布时间】:2020-11-26 13:20:47
【问题描述】:

我目前在 aws 上有一个应用程序,它使用 Spring Boot 微服务作为后端,使用 ReactJS 作为前端。

它目前的工作方式是用户使用用户名和密码登录,然后对帐户微服务进行 fetch 调用。在那里,我使用 db 进行基本的用户名和密码检查,然后发回 True 或 False 响应。

如果为 True,则用户登录并重定向到产品页面,在该页面中,对产品服务进行 fetch 调用以获取所有产品的列表。

我现在想引入 JWT 授权,以便只有登录用户才能调用产品服务。

我的问题是 - 我可以在我的当前帐户服务中引入它,还是必须在这两个服务前面放置一些东西(目前它们共享一个负载均衡器)。或者我可能需要通过账户服务来引导产品服务流量?

另外,如果我可以在我的当前帐户服务中引入它,我如何将所需的密钥共享给产品服务,以便它可以在请求进入时验证?

干杯,克里斯

【问题讨论】:

  • 你打算在 jwt 中使用什么类型的加密算法
  • @satyesht 老实说,还没有计划那么远。对任何解决方案和良好做法持开放态度。你有什么建议?
  • 这是一个广泛的问题。谁将成为您的 Oauth 提供商(即 AWS Cognito、Auth0、Okta、您自己的 Keycloak 等)? Spring 有some articles 来实现这个,但我认为你不会在这里得到一个简单的答案。并且不需要通过 HTTPS 链接加密 JWT。

标签: java amazon-web-services spring-boot api jwt-auth


【解决方案1】:

为此,通用方法是拥有一个 API 网关层,即一个微服务,它必须处理以下事情 -

  1. 执行身份验证任务并为用户生成 JWT 令牌
  2. 每次用户出于授权目的进行调用时,在解码令牌后读取角色和职责
  3. 从这里获得用户角色后,您可以在 API 网关中为每个服务创建路由,以检查他是否可以访问该功能,在您的情况下,假设用户的角色是“仓库管理员”,他是有资格处理产品和相关信息,然后他可以访问产品服务,为此您只能在 API 网关层进行角色检查,当请求来自与产品服务相关的路由访问时(比如说它的“/products ")。因此,您仅在 API 网关层维护真实性检查。
  4. 或者在其他情况下,如果您想维护一个帐户服务并负责进行身份验证和授权,那么您必须将 API 网关的调用定向到帐户服务并将请求路由到相关的后端服务,一旦响应从携带用户角色和权限的帐户服务到达。

【讨论】:

  • 所以你说我应该创建第三个微服务并将其放在两者前面并用于身份验证。然后将帐户服务重用于其他事情,例如带来完整的帐户详细信息、密码更改等?
  • Auth 服务是连接到 AccountDB 还是调用帐户服务获取用户名、密码信息?
  • 我猜你可以选择这两个中的任何一个,并且保持不同的服务将是一个很酷的主意
  • 嗯我现在正在考虑将我的帐户服务更改为身份验证服务,因为现在它只有一个功能来授权用户。如果我将 JWT 令牌发送到前端,然后将其附加到对产品服务进行的 fetch 调用上,它会起作用吗?还是需要网关?
  • 实际上我可以配置我的应用程序负载均衡器来执行 API 网关在检查传入请求以进行身份​​验证时会执行的操作吗?
猜你喜欢
  • 2018-07-30
  • 2018-08-21
  • 2020-05-27
  • 1970-01-01
  • 2022-01-15
  • 2020-04-17
  • 2019-01-07
  • 2019-10-22
  • 2016-07-10
相关资源
最近更新 更多