首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从spring boot管理访问oAuth2安全背后的执行器端点

如何从spring boot管理访问oAuth2安全背后的执行器端点
EN

Stack Overflow用户
提问于 2017-07-05 23:05:11
回答 2查看 1.7K关注 0票数 10

我有由oAuth2保护的spring boot应用程序,只有当执行器端点不安全时,我才能从spring boot管理访问应用程序。我已经检查了github上的安全示例,即使那里的/health端点不安全。有没有办法从spring boot admin访问带有由oAuth2保护的执行器端点的spring boot应用程序?

EN

回答 2

Stack Overflow用户

发布于 2019-07-23 21:23:17

基于WIPU的回答,我创建了简单的更新

代码语言:javascript
运行
复制
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;
    }
}

代码语言:javascript
运行
复制
@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);
    }

}
票数 4
EN

Stack Overflow用户

发布于 2019-03-14 20:10:30

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

在引导管理的de.codecentric.boot.admin.server.config.AdminServerAutoConfiguration.类中,可以找到方法basicAuthHttpHeadersProviderhttpHeadersProvider。你可以使用这个机制来添加你自己的头提供者。只需提供您自己的AuthHeaderProvider。如下所示:

代码语言:javascript
运行
复制
    @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;
    }

这样,InstanceWebClient.builder()将获取您的持有者身份验证头,并将其发送到您的执行器端点。

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

致以敬意,

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

https://stackoverflow.com/questions/44929918

复制
相关文章

相似问题

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