2015-04-13 13 views
6

Capisco che un server Spring Cloud Config può essere protetto utilizzando un nome utente e una password, che devono essere forniti dai client di accesso.Come proteggere il server di configurazione Spring Cloud

Come posso impedire ai clienti di memorizzare questi nome utente e la password di testo chiaro nei file bootstrap.yml nel client applicazioni/servizi?

+0

si può provare di avere un segnaposto per la password nella tua bootstrap.yml e citare la password come una variabile d'ambiente. –

risposta

1

La stessa base "autenticazione di base" (da qui https://github.com/spring-cloud-samples/configserver)

È possibile aggiungere l'autenticazione HTTP di base includendo una dipendenza in più su Primavera di sicurezza (ad esempio attraverso la primavera-boot-starter -sicurezza). Il nome utente è "utente" e la password viene stampata sulla console all'avvio (approccio standard Spring Boot). Se si utilizza Maven (pom.xml):

<dependency> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-security</artifactId> 
</dependency> 

Se vuoi coppie utente/password personalizzato, è necessario indicare nel file di

security: 
    basic: 
     enabled: false 

configurazione del server e aggiungere questa classe minima nel codice (BasicSecurityConfiguration.java):

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.beans.factory.annotation.Value; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; 
import org.springframework.security.config.annotation.web.builders.HttpSecurity; 
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; 

@Configuration 
//@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true) 
public class BasicSecurityConfiguration extends WebSecurityConfigurerAdapter { 

    @Value("#{'${qa.admin.password:admin}'}") //property with default value 
     String admin_password; 

    @Value("#{'${qa.user.password:user}'}") //property with default value 
      String user_password; 

    @Autowired 
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { 
     auth 
      .inMemoryAuthentication() 
      .withUser("user").password(user_password).roles("USER") 
     .and() 
      .withUser("admin").password(admin_password).roles("USER", "ACTUATOR"); 
    } 

    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
     http 
      .csrf() 
      .disable() 
      .httpBasic() 
     .and() 
      .authorizeRequests() 
      .antMatchers("/encrypt/**").authenticated() 
      .antMatchers("/decrypt/**").authenticated() 
      //.antMatchers("/admin/**").hasAuthority("ROLE_ACTUATOR") 
      //.antMatchers("/qa/**").permitAll() 

     ; 
    } 

} 

@Value ("# {'$ {qa.admin.password: admin}'}") consente di definire le password nel file di configurazione delle proprietà, nelle variabili di ambiente o nella riga di comando.

Per esempio (application.yml):

server: 
    port: 8888 

security: 
    basic: 
     enabled: false 

qa: 
    admin: 
    password: adminadmin 
    user: 
    password: useruser 

management: 
    port: 8888 
    context-path: /admin 

logging: 
    level: 
    org.springframework.cloud: 'DEBUG' 

spring: 
    cloud: 
    config: 
     server: 
     git: 
      ignoreLocalSshSettings: true 
      uri: ssh://[email protected]/repo/configuration.git 

questo funziona per me.

Edit: anziché la classe, si può mettere la configurazione utente di base direttamente in application.yaml:

security: 
    basic: 
    enabled: true 
    path: /** 
    ignored: /health**,/info**,/metrics**,/trace** 
    user: 
    name: admin 
    password: tupassword 
Problemi correlati