java - 跟踪谁在微服务中创建或更改了实体

标签 java spring spring-boot microservices auditing

通常在spring boot应用中,我们可以使用jpa audit来做跟踪。 Spring Boot Jpa Auditing

在微服务架构中,我会尽量避免在核心微服务中涉及安全性。相反,我们可以在 api 网关上进行身份验证/授权。

同时,如果核心服务没有获取当前登录用户,我们必须想办法将当前运算符(operator)传递给核心服务。它可以是请求中的用户标识符 header 。或者我们可以将 token 传递给核心服务,让它从 auth 服务器获取登录用户。

请问有没有人处理过这种情况,给点建议。

最佳答案

如果我正确理解问题...

  • 您有一个 API 网关,其中实现了身份验证/授权
  • 通过 API 网关成功协商后,调用将传递到核心服务
  • 核心服务对“谁做了什么”进行一些审计
  • 为了执行此审计,核心服务需要调用用户的身份

我认为这里可能的方法是:

  1. 在 API 网关中实现审计。我怀疑这不是运行器,因为审计可能比在 API 网关中实现的更细粒度。我怀疑您最多可以在 API channel 中审核类似用户 A 调用端点 B 的内容,而您可能想审核类似用户 A 在时间 {...} 插入项目 {...} 的内容。 .. 这只能在核心服务中完成。

  2. 将原始调用者的凭据传递到核心服务并让它再次进行身份验证。这将确保没有未经身份验证的调用可以到达核心服务,并且还会产生将用户身份提供给核心服务的副作用,然后它可以将其用于审计。但是,如果您的 API 网关是核心服务的唯一入口点,那么在核心服务中再次进行身份验证仅用于提供用户身份,在这种情况下,它可能被视为矫枉过正。

    <
  3. 将经过身份验证的用户身份从 API 网关传递到核心服务,让核心服务在其审计中使用它。如果您的 API 网关是核心服务的唯一入口点,则无需在核心服务上重新进行身份验证,并且提供经过身份验证的用户身份可被视为核心服务 API 的一部分。至于如何这个身份应该从 API 网关传播到核心服务,有几个选项取决于 API 网关和核心服务之间互操作的性质。听起来这些是 HTTP 调用,如果是这样,那么请求 header 就有意义了,因为此状态是请求范围的。您可能已经在传播一些“水平状态”(即与调用相关但不是调用者提供的参数的状态),例如 correlationId(它允许您通过API 进入核心服务并再次返回),如果是这样,则可以将经过身份验证的用户标识添加到该状态并以相同的方式提供给核心服务。

关于java - 跟踪谁在微服务中创建或更改了实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45929864/

相关文章:

java - Spring Framework 5 中 Guava 的支持下降是什么意思?

java - Thymeleaf 中的嵌套循环绑定(bind)

java - Maven 项目中 8u162-jdk 的拉取访问被拒绝

spring-mvc - 无法在测试类中 Autowiring bean

java - 在 Java 中跟踪时间

java - Android 单选按钮组,为什么我需要这个?

java - 在 Spring 中停止 HTTP 请求超时

spring-boot - Spring boot 2 Undertow,无法设置 UndertowOptions.ALLOW_UNESCAPED_CHARACTERS_IN_URL

java - matlab代码的空指针异常

java - 使用 BufferedReader 搜索 txt 或将数据导入到类对象中