我应该针对授权服务器双重验证 jwt 令牌吗?我应该使用授权服务器用户 ID 作为外键吗?

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

我目前正在将我的整体应用程序重构为微服务方法。现在我有一个 SPA,它使用来自使用单个数据库的单个 API 的数据。在我的数据库中,我存储:

  1. 用户(ID、用户名、密码等)
  2. 类别(ID、名称、用户ID)
  3. 项目(ID、名称、用户ID)

首先,我将引入一个授权服务器(keycloak),以便它处理用户身份验证,因此我不必处理用户信息。 其次,我将后端逻辑拆分为多个微服务,并添加 API 网关作为后端入口点。

现在我有两个问题:

  1. 我已经在 API 网关中验证来自 SPA(从身份验证服务器获取)的 JWT 令牌。我还应该在所有下游服务中验证 JWT 令牌吗?
  2. 将用户信息移至 Keycloak 后,我可以删除我的用户表,因为该信息将位于 keycloak 数据库中。但是,我仍然在某些表中使用“userId” 作为参考键。我应该使用 keycloak 数据库中的 userId 吗?

提前致谢!

oauth-2.0 authorization microservices keycloak openid-connect
1个回答
0
投票

Q1

这取决于您想要的安全程度。在零信任设置中,每个 API 都会验证 JWT 访问令牌,然后使用令牌的范围和声明进行授权。

这样做的好处是可以防止来自恶意方或组件的内部威胁。网络内部。

在这种情况下,您可以避免在网关中进行 JWT 验证,而是在 API 中进行验证。如果需要,网关可以执行其他安全工作,例如令牌转换,以获取 API 所需的特定令牌。

Q2

授权服务器通常会为其主题声明生成 UUID 等用户身份。这些对您的 API 或业务数据没有意义。

无论您采用哪种解决方案,您都应该确保将来可以迁移到不同的授权服务器,而不会对您的业务数据产生任何不利影响。因此我不会使用这样的 UUID 作为外键。

您可以使用用户映射解决方案。例如,如果您有现有的客户 ID 字段,请将其迁移到 Keycloak 并发出该字段以作为自定义声明访问令牌。然后,您的 API 可以以业务术语识别用户,并且您可以维护用户数据历史记录。

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