Spring cloud spring oauth和客户端凭据M2M调用

Spring cloud spring oauth和客户端凭据M2M调用,spring-cloud,spring-cloud-netflix,spring-oauth2,Spring Cloud,Spring Cloud Netflix,Spring Oauth2,我有一个前端网站,它使用spring-cloud-oauth2和spring-cloud-oauth2进行保护。使用@EnableResourceServer保护我的所有后端资源 所有来自UI的对这些资源服务的请求都是通过Zuul网关授权的,但我的问题是,后端任务计划每天运行,或者由电子邮件触发。这些任务未经授权,我从阅读中了解到,它们应该作为客户端凭据进行身份验证。但是,在尝试与安全资源通信之前,我不知道如何配置外部客户端以获取访问代码 我已经创建了一个示例,在这个项目中,除了任务服务之外,所

我有一个前端网站,它使用
spring-cloud-oauth2
spring-cloud-oauth2进行保护。使用
@EnableResourceServer
保护我的所有后端资源

所有来自UI的对这些资源服务的请求都是通过Zuul网关授权的,但我的问题是,后端任务计划每天运行,或者由电子邮件触发。这些任务未经授权,我从阅读中了解到,它们应该作为
客户端凭据进行身份验证。但是,在尝试与安全资源通信之前,我不知道如何配置外部客户端以获取访问代码


我已经创建了一个示例,在这个项目中,除了任务服务之外,所有的东西都在工作,添加下面的拦截器就成功了,但我不确定这是最好的解决方案

@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());
    }
}

更好的方法

在进一步阅读之后,我发现SpringCloudSecurity已经有了一个拦截器,所以我们只需要声明一个类型为
OAuth2FeignRequestInterceptor
的bean,如下所示

@Configuration
@EnableOAuth2Client
@Slf4j
public class OAuth2FeignAutoConfiguration {

    @Bean
    public OAuth2FeignRequestInterceptor oAuth2FeignRequestInterceptor(OAuth2ClientContext oauth2ClientContext, OAuth2ProtectedResourceDetails details) {
        return new OAuth2FeignRequestInterceptor(oauth2ClientContext,details);
    }


}