首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >弹簧引导将OAuth2证书传递给OpenFeign客户端

弹簧引导将OAuth2证书传递给OpenFeign客户端
EN

Stack Overflow用户
提问于 2022-09-27 14:39:47
回答 1查看 145关注 0票数 0

我有两个服务:服务A( http客户端的spring和openfeign )和服务B。我的服务在网关(APISIX)后面,它与keycloak集成。这两个服务都配置为OAuth2以公开给公众。

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

非常感谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-27 23:05:08

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

默认的Authentication类型是用于具有JWT解码器的资源服务器的JwtAuthenticationToken和用于内省的BearerTokenAuthentication

您可以直接查询请求的SecurityContext:

代码语言:javascript
复制
    final AbstractOAuth2TokenAuthenticationToken<? extends AbstractOAuth2Token> auth = (AbstractOAuth2TokenAuthenticationToken) SecurityContextHolder.getContext().getAuthentication();
    final String bearerToken = auth.getToken().getTokenValue();

或者让它作为@Controller方法参数自动注入:

代码语言:javascript
复制
@RestController
public class MyController {
    @GetMapping("/reflect-bearer-token")
    @PreAuthorize("isAuthenticated()")
    public String reflectBearerToken(AbstractOAuth2TokenAuthenticationToken<? extends AbstractOAuth2Token> auth) {
        return auth.getToken().getTokenValue();
}

第一个选项(查询安全上下文)可以应用于一个假装的RequestInterceptor中,以便向每个请求中添加一个具有经过身份验证的用户支持的Authorization头。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73869465

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档