如何从Spring Boot管理员访问oAuth2安全性背后的执行器端点

use*_*551 8 spring-boot-admin

我已经使用oAuth2保护了Spring Boot应用程序,只有在执行器端点未受到保护的情况下,我才能从Spring Boot管理员访问应用程序。我已经检查了github上的安全性示例,即使/ health端点不安全。有什么方法可以通过spring boot admin访问由oAuth2保护的执行器端点的spring boot应用程序。

小智 6

根据 WIPU 的回答,我创建了简单的更新

public class BearerAuthHeaderProvider implements HttpHeadersProvider {

    private final OAuth2RestTemplate template;

    public BearerAuthHeaderProvider(OAuth2RestTemplate template) {
        this.template = template;
    }

    public HttpHeaders getHeaders(Instance ignored) {
        HttpHeaders headers = new HttpHeaders();
        headers.set("Authorization", template.getAccessToken().getTokenType() + " " + template.getAccessToken().getValue());
        return headers;
    }
}
Run Code Online (Sandbox Code Playgroud)

@Configuration
public class AdminServerConfiguration extends AdminServerAutoConfiguration {

    public AdminServerConfiguration(AdminServerProperties adminServerProperties) {
        super(adminServerProperties);
    }

    @Bean
    public OAuth2ProtectedResourceDetails clientCredentialsResourceDetails() {
        ClientCredentialsResourceDetails details = new ClientCredentialsResourceDetails();
        //set you details here: id, clientid, secret, tokenendpoint
        details.setClientId("actuator");
        details.setClientSecret("actuator_password");
        details.setAccessTokenUri("http://localhost:8081/auth-server/oauth/token");
        details.setGrantType("client_credentials");
        return details;
    }

    @Bean
    @Order(0)
    @ConditionalOnMissingBean
    public BearerAuthHeaderProvider bearerAuthHeaderProvider(){
        // couldn't inject differently restTemplate 
        OAuth2ProtectedResourceDetails resourceDetails = this.clientCredentialsResourceDetails();
        OAuth2RestTemplate oAuth2RestTemplate = new OAuth2RestTemplate(resourceDetails);
        return new BearerAuthHeaderProvider(oAuth2RestTemplate);
    }

}
Run Code Online (Sandbox Code Playgroud)


WiP*_*iPU 4

这个问题很老了,但根本没有答案。

de.codecentric.boot.admin.server.config.AdminServerAutoConfiguration.boot admin 类中,您可以找到方法basicAuthHttpHeadersProviderhttpHeadersProvider。您可以使用此机制来添加您自己的标头提供程序。只需提供您自己的 AuthHeaderProvider 即可。就像下面这样:

    @Bean
    public BearerAuthHeaderProvider bearerAuthHeaderProvider(OAuth2RestTemplate template){
        return new BearerAuthHeaderProvider(template);
    }

    @Bean
    public OAuth2RestTemplate restTemplate(OAuth2ProtectedResourceDetails resourceDetails) {
        return new OAuth2RestTemplate(resourceDetails);
    }
    @Bean
    public OAuth2ProtectedResourceDetails clientCredentialsResourceDetails() {
        ClientCredentialsResourceDetails details = new ClientCredentialsResourceDetails ();
        //set you details here: id, clientid, secret, tokenendpoint
        details.setGrantType("client_credentials");
        return details;
    }
Run Code Online (Sandbox Code Playgroud)

这样,它将InstanceWebClient.builder()拾取您的承载身份验证标头并将其发送到您的执行器端点。

我不确定这是否是正确的解决方案,但它是一个起点。

问候,