我目前正在将我的整体应用程序重构为微服务方法。现在我有一个 SPA,它使用来自使用单个数据库的单个 API 的数据。在我的数据库中,我存储:
首先,我将引入一个授权服务器(keycloak),以便它处理用户身份验证,因此我不必处理用户信息。 其次,我将后端逻辑拆分为多个微服务,并添加 API 网关作为后端入口点。
现在我有两个问题:
提前致谢!
Q1
这取决于您想要的安全程度。在零信任设置中,每个 API 都会验证 JWT 访问令牌,然后使用令牌的范围和声明进行授权。
这样做的好处是可以防止来自恶意方或组件的内部威胁。网络内部。
在这种情况下,您可以避免在网关中进行 JWT 验证,而是在 API 中进行验证。如果需要,网关可以执行其他安全工作,例如令牌转换,以获取 API 所需的特定令牌。
Q2
授权服务器通常会为其主题声明生成 UUID 等用户身份。这些对您的 API 或业务数据没有意义。
无论您采用哪种解决方案,您都应该确保将来可以迁移到不同的授权服务器,而不会对您的业务数据产生任何不利影响。因此我不会使用这样的 UUID 作为外键。
您可以使用用户映射解决方案。例如,如果您有现有的客户 ID 字段,请将其迁移到 Keycloak 并发出该字段以作为自定义声明访问令牌。然后,您的 API 可以以业务术语识别用户,并且您可以维护用户数据历史记录。