我有一个使用 # force the server VM (remove on 32-bit client JVMs)
-server
spring-cloud-secuirty
保护的前端网站。我的所有后端资源都使用spring-cloud-oauth2
保护。
来自UI的这些资源服务的所有请求都是通过Zuul网关授权的,但我的问题是计划在每日基础上运行的后端任务,或者是由电子邮件触发的后端任务。这些任务未经授权,正如我从阅读中理解的那样,它们应该被认证为@EnableResourceServer
。但在尝试与安全资源通信之前,我无法弄清楚如何配置假装客户端以获取访问代码。
我已经创建了一个示例project,在这个项目中,除了任务服务
之外,每件事情都有效答案 0 :(得分:1)
添加下面的拦截器就可以了,但我不确定这是最好的解决方案
@Component
public class Interceptor implements RequestInterceptor {
private final OAuth2RestTemplate template;
public Interceptor(ClientCredentialsResourceDetails oauth2RemoteResource) {
template = new OAuth2RestTemplate(oauth2RemoteResource, new DefaultOAuth2ClientContext(new DefaultAccessTokenRequest()));
}
@Override
public void apply(RequestTemplate requestTemplate) {
requestTemplate.header("Authorization", "bearer " + template.getAccessToken().getValue());
}
}
更好的方法
经过更多阅读后,我发现spring-cloud-security已经有了一个拦截器,所以我们只需要声明一个OAuth2FeignRequestInterceptor
类型的bean,如下所示
@Configuration
@EnableOAuth2Client
@Slf4j
public class OAuth2FeignAutoConfiguration {
@Bean
public OAuth2FeignRequestInterceptor oAuth2FeignRequestInterceptor(OAuth2ClientContext oauth2ClientContext, OAuth2ProtectedResourceDetails details) {
return new OAuth2FeignRequestInterceptor(oauth2ClientContext,details);
}
}