我有两个服务:服务A( http客户端的spring和openfeign )和服务B。我的服务在网关(APISIX)后面,它与keycloak集成。这两个服务都配置为OAuth2以公开给公众。
有一个用例,当logged in用户请求服务A时,服务A请求使用openfeign服务B。在请求服务B时,将OAuth2证书传递给OpenFeign客户端的正确方法是什么?
非常感谢。
发布于 2022-09-27 23:05:08
如果您是在资源服务器上,并且希望代表经过身份验证的用户从该资源服务器发出请求,您应该能够在安全上下文中从Authentication实例访问Bearer令牌。
默认的Authentication类型是用于具有JWT解码器的资源服务器的JwtAuthenticationToken和用于内省的BearerTokenAuthentication。
您可以直接查询请求的SecurityContext:
final AbstractOAuth2TokenAuthenticationToken<? extends AbstractOAuth2Token> auth = (AbstractOAuth2TokenAuthenticationToken) SecurityContextHolder.getContext().getAuthentication();
final String bearerToken = auth.getToken().getTokenValue();或者让它作为@Controller方法参数自动注入:
@RestController
public class MyController {
@GetMapping("/reflect-bearer-token")
@PreAuthorize("isAuthenticated()")
public String reflectBearerToken(AbstractOAuth2TokenAuthenticationToken<? extends AbstractOAuth2Token> auth) {
return auth.getToken().getTokenValue();
}第一个选项(查询安全上下文)可以应用于一个假装的RequestInterceptor中,以便向每个请求中添加一个具有经过身份验证的用户支持的Authorization头。
https://stackoverflow.com/questions/73869465
复制相似问题