Spring config server encrypt запрещен

Я настроил весенний облачный конфигурационный сервер для использования oAuth2 в целях безопасности. Все работает хорошо, кроме конечной точки с шифрованием. Когда я пытаюсь получить доступ к /encrypt, я получаю 403 Forbidden. Я включаю токен носителя авторизации в заголовок. Есть ли способ разрешить вызов конечной точки шифрования, когда сервер защищен с помощью oAuth, или он всегда заблокирован? Дайте мне знать, если вы хотите увидеть какие-либо файлы конфигурации для этого сервера.

Для справки, вот что работает.

  • вызов /encrypt/status производит {"status":"OK"}

  • Репозиторий git извлекается, потому что я могу получить доступ к файлу свойств с сервера.

  • oAuth-аутентификация работает с Google, потому что она проходит через процесс входа в систему.

    Вот настройки безопасности весны.

    security: 
     require-ssl: true 
     auth2:  
       client:  
         clientId: PROVIDED BY GOOGLE  
         clientSecret: PROVIDED BY GOOGLE  
         accessTokenUri: https://www.googleapis.com/oauth2/v4/token  
         userAuthorizationUri: https://accounts.google.com/o/oauth2/v2/auth  
         scope:  
            - openid  
            - email  
            - profile  
      resource:  
         userInfoUri: https://www.googleapis.com/oauth2/v3/userinfo  
         preferTokenInfo: true  
       
    server:  
       port: 8443  
       ssl:  
         key-store-type: PKCS12  
         key-store: /spring-config-server/host/tomcat-keystore.p12  
         key-alias: tomcat  
         key-store-password: ${KEYSTORE_PASSWORD}

Вот мои зависимости из файла POM, чтобы вы могли видеть версию используемых мной библиотек.

<parent>  
    <groupId>org.springframework.boot</groupId>  
    <artifactId>spring-boot-starter-parent</artifactId>  
    <version>2.0.0.RELEASE</version>  
    <relativePath/>  
    <!-- lookup parent from repository -->  
</parent>  
<properties>  
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>  
    <java.version>1.8</java.version>  
    <spring-cloud.version>Finchley.M8</spring-cloud.version>  
</properties>  
<dependencies>  
    <dependency>  
        <groupId>org.springframework.cloud</groupId>  
        <artifactId>spring-cloud-config-server</artifactId>  
    </dependency>  
    <dependency>  
        <groupId>org.springframework.boot</groupId>  
        <artifactId>spring-boot-starter-test</artifactId>  
    </dependency>  
    <dependency>  
        <groupId>org.springframework.cloud</groupId>  
        <artifactId>spring-cloud-security</artifactId>  
    </dependency>  
</dependencies>  
<dependencyManagement>  
    <dependencies>  
        <dependency>  
            <groupId>org.springframework.cloud</groupId>  
            <artifactId>spring-cloud-dependencies</artifactId>  
            <version>${spring-cloud.version}</version>  
            <type>pom</type>  
            <scope>import</scope>  
        </dependency>  
    </dependencies>  
</dependencyManagement>  

Можете ли вы отредактировать свой ответ и добавить конфигурацию Spring Security?

Ortomala Lokni 14.03.2018 17:07

Какую версию Spring Cloud Config вы используете?

Ortomala Lokni 14.03.2018 17:09
4
2
2 386
3

Ответы 3

Чтобы решить эту проблему, мне нужно было расширить WebSecurityConfigurerAdapter, а в методе настройки я отключил токен CSRF.

          http
            .csrf().disable()
            .antMatcher("/**")                
            .authorizeRequests()
            .antMatchers("/", "/login**", "/error**")
            .permitAll()
            .anyRequest().authenticated();

Я решаю это реализуя этот WebSecurityConfigurer. Он отключает CSRF и устанавливает базовую аутентификацию. В Spring Boot 2.0.0 вы не можете отключить CSRF, используя свойства, он заставляет вас реализовать bean-компонент конфигурации безопасности Java.

package my.package.config.server;

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@Configuration
@EnableWebSecurity
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable().authorizeRequests()
        .anyRequest().authenticated().and()
        .httpBasic();
;
    }


}

Надеюсь, поможет

Да, это помогает. Так. Много. Боролись с этой проблемой в течение нескольких дней после обновления нашего сервера до SB 2. Обратите внимание, что это не упоминается в документации cloud.spring.io/spring-cloud-static/spring-cloud-config/…

abh 01.05.2019 18:42

Мы должны реализовать WebSecurityConfigurerAdapter в классе, связанном с конфигурацией. Чтобы услуги шифрования / дешифрования были доступны. Убедитесь, что вы настроили Секретный ключ в bootstrap.properties или application.properties.

Другие вопросы по теме