Я настроил весенний облачный конфигурационный сервер для использования 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 Cloud Config вы используете?
Чтобы решить эту проблему, мне нужно было расширить 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/…
Мы должны реализовать WebSecurityConfigurerAdapter в классе, связанном с конфигурацией. Чтобы услуги шифрования / дешифрования были доступны. Убедитесь, что вы настроили Секретный ключ в bootstrap.properties или application.properties.
Можете ли вы отредактировать свой ответ и добавить конфигурацию Spring Security?