我有一个基于Java/Spring的微服务架构,它有两个服务:
- A-有一个面向公众的端点,它执行一些操作,然后调用B上的以下端点。此端点需要一个授权标头(OAuth2)来标识用户。
- B-有一个端点,该端点也需要一个Authorization标头(OAuth2),以便它可以确定哪个用户进行了调用。
我已经使用OpenAPI指定了B的端点。我正在使用OpenAPI Generator生成A中的客户端(Spring WebClient)和B中的服务器(Spring Boot)。
我的问题是:要将Authorization报头从A传递到B,需要执行什么操作?我知道如何设置静态报头,但不知道如何根据A接收到的内容传递报头。
与此问题类似,但对于WebClient:OpenAPI client generator Java - header per call
2条答案
按热度按时间zy1mlcev1#
由于您的
A
服务是一个资源服务器,并且您希望代表向A
发起请求的用户向服务B
发出请求,我只需要在WebClient上设置一个Bearer
Authorization
报头,该报头包含从当前安全上下文中检索到的原始访问令牌字符串(使用SecurityContextHolder
静态访问器,或者让Spring自动注入AbstractOAuth2TokenAuthenticationToken<?> auth
作为@Controller
方法参数)。如果您的
A
服务是一个客户端,您可以像我在this tutorial的UiController
中所做的那样。1l5u6lss2#
原来我的问题是如何在OpenAPI规范中指定端点安全性。
我补充道:
并在我端点上引用了该安全架构:
现在,当我在这个模式上运行
openapi-generate
并在Spring Boot(服务器)或Java WebClient(客户机)上生成它时,生成的端点签名看起来像这样:这个方法的参数
String authorization
之前没有生成,这正是我在这里需要的,它允许我把A的头传递给B的调用。支持@Ch4mp在这里帮忙。