我已配置spring cloud config server以使用oAuth2来提高安全性。除加密终点外,一切运行良好。当我尝试访问/encrypt
时,我得到403禁止。我在标题中包含授权承载令牌。有没有办法允许在使用oAuth保护服务器时调用加密端点,或者它是否始终被阻止?如果您想查看此服务器的任何配置文件,请告诉我。
仅供参考,以下是有效的方法。
/encrypt/status
会产生{"status":"OK"}
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>
答案 0 :(得分:11)
我解决了它实现此WebSecurityConfigurer的问题。它禁用CSRF并设置基本身份验证。在Spring Boot 2.0.0中,您无法使用强制您实现Java安全配置bean的属性来禁用CSRF。
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();
;
}
}
希望有所帮助
答案 1 :(得分:0)
要解决此问题,我需要扩展WebSecurityConfigurerAdapter,并在配置方法中禁用CSRF令牌。
{{1}}
答案 2 :(得分:0)
我们必须在与配置相关的类中实现WebSecurityConfigurerAdapter。这样就可以访问加密/解密服务。确保已在bootstrap.properties或application.properties中配置了 secret.key 。