繁体   English   中英

Spring 引导将 OAuth2 凭据传递给 OpenFeign 客户端

[英]Spring boot pass OAuth2 credential to OpenFeign client

我有 2 项服务:服务 A(http 客户端的 spring boot 和openfeign )和服务 B。我的服务位于与 keycloak 集成的网关 (APISIX) 后面。 这两种服务都配置为 OAuth2 以向公众公开。

有一个用例,当logged in用户请求服务 A,服务 A 使用openfeign请求服务 B。 请求服务 B 时,将 OAuth2 凭证传递给 OpenFeign 客户端的正确方法是什么?

非常感谢你。

如果您在资源服务器上并希望代表经过身份验证的用户从该资源服务器发出请求,您应该能够从安全上下文中的Authentication实例访问 Bearer 令牌。

对于具有BearerTokenAuthentication解码器的资源服务器,默认Authentication类型是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 header 和经过身份验证的用户 Bearer。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM