如何在 spring 启动时将经过身份验证的请求发送到另一个服务
How to send authenticated request to another service in spring boot
我有 3 个服务 1 个身份验证服务(例如服务 A)和其他 2 个服务(例如服务 B 和服务 C)使用相同的身份验证 A 服务。
我在服务 B 中有这样的方法
@PostMapping("/update-account")
public ResponseEntity<Object> updateAccount(HttpServletRequest request,
OAuth2Authentication principal,
@RequestBody UpdateAccountDto updateAccountDto){
}
在这个方法中,我调用了其他方法,我有一些逻辑,最后我想使用 restTemaplte
调用服务 C 的端点,就像这样
String serviceBEndpoint= "localhost:8090/testapi/updateAccount";
URI serviceUri = UriComponentsBuilder.fromUriString(changeEmailUri)
.build()
.toUri();
HttpHeaders headers = new HttpHeaders();
headers.set("someheader", someheader);
HttpEntity<UpdateUserDto> request = new HttpEntity<>(updadteUserDto, headers);
restTemplate.postForEntity(serviceUri, request, AuthenticationSuccessDto.class);
用户使用正确的令牌调用了服务 B 的端点(请求已通过身份验证),并且从服务 B 调用服务 C 也是合法的,因为请求已通过身份验证,那么我该如何以正确的方式做到这一点?
对于同一家公司所有的微服务,最常见的方法是这样的:
客户端对用户进行身份验证并获得有权调用服务 B 和 C 的访问令牌
因此,访问令牌可能具有范围 B 和 C - 或类似的范围 - 与这些服务的业务相关
客户端调用服务 B 并在 HTTP 授权中包含访问令牌 header
这意味着服务 B 可以将令牌转发给服务 C,再次在 HTTP 授权中 header,服务 C 将接受它,因为它包含范围 C。看起来像您的 Rest 模板上面的代码设置得很好,可以启用此功能。
服务 B 和 C 都需要以标准方式验证访问令牌 - 有关示例,请参见 these guides。
这篇 Scope Best Practices 文章中有关于此模式的更多信息。
我有 3 个服务 1 个身份验证服务(例如服务 A)和其他 2 个服务(例如服务 B 和服务 C)使用相同的身份验证 A 服务。
我在服务 B 中有这样的方法
@PostMapping("/update-account")
public ResponseEntity<Object> updateAccount(HttpServletRequest request,
OAuth2Authentication principal,
@RequestBody UpdateAccountDto updateAccountDto){
}
在这个方法中,我调用了其他方法,我有一些逻辑,最后我想使用 restTemaplte
调用服务 C 的端点,就像这样
String serviceBEndpoint= "localhost:8090/testapi/updateAccount";
URI serviceUri = UriComponentsBuilder.fromUriString(changeEmailUri)
.build()
.toUri();
HttpHeaders headers = new HttpHeaders();
headers.set("someheader", someheader);
HttpEntity<UpdateUserDto> request = new HttpEntity<>(updadteUserDto, headers);
restTemplate.postForEntity(serviceUri, request, AuthenticationSuccessDto.class);
用户使用正确的令牌调用了服务 B 的端点(请求已通过身份验证),并且从服务 B 调用服务 C 也是合法的,因为请求已通过身份验证,那么我该如何以正确的方式做到这一点?
对于同一家公司所有的微服务,最常见的方法是这样的:
客户端对用户进行身份验证并获得有权调用服务 B 和 C 的访问令牌
因此,访问令牌可能具有范围 B 和 C - 或类似的范围 - 与这些服务的业务相关
客户端调用服务 B 并在 HTTP 授权中包含访问令牌 header
这意味着服务 B 可以将令牌转发给服务 C,再次在 HTTP 授权中 header,服务 C 将接受它,因为它包含范围 C。看起来像您的 Rest 模板上面的代码设置得很好,可以启用此功能。
服务 B 和 C 都需要以标准方式验证访问令牌 - 有关示例,请参见 these guides。
这篇 Scope Best Practices 文章中有关于此模式的更多信息。