0
点赞
收藏
分享

微信扫一扫

【Spring Cloud总结】37.Spring Cloud Config的安全认证


接上篇《​​36.配置属性加解密之非对称加密​​》  Spring Cloud版本为Finchley.SR2版

上两篇我们讲解了有关Spring Cloud Config的对称加密与非对称加解密的相关操作,本篇来讲解Spring Cloud Config的安全认证机制。
本部分官方文档:​​​https://cloud.spring.io/spring-cloud-static/Finchley.SR4/single/spring-cloud.html#_security​​ 注:好像Finchley.SR2的文档已经挂了,最新的是Finchley.SR4的文档。

一、简述Spring Cloud Config的安全认证配置步骤

Spring Cloud Config的安全认证与Eureka的安全认证类似,还记得之前Eureka是怎么添加安全认证的吗?我们回顾一下:
1、首先在eureka server工程pom文件中引入eureka的安全认证依赖:

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

2、在eureka server工程的yml配置文件中添加security相关的配置:

spring:
security:
user:
name: user
password: password123

注:因Finchey版本默认开启csrf,需要关闭csrf,开启httpBasic。
3、然后修改注册到eureka的客户端工程的yml配置的defaultZone的链接即可,格式:

eureka.client.serviceUrl.defaultZone=http://${userName}:${password}@localhost:8761/eureka

注:详细请参见之前的文章:​​《【Spring Cloud总结】6.将微服务注册到Eureka Server上》​​。

通过回顾其配置方式,我们可以知道,添加安全认证是需要Eureka服务端添加spring-security相关的依赖,并且在配置文件中指定相关的认证账号和密码,而客户端需要重新配置注册服务地址defaultZone,将认证账号密码带上。

反观我们前面学习的Spring Cloud Config,与Eureka的服务端-客户端机制类似,也是由Config Server服务端提供配置信息访问服务,Config Client通过服务端获取配置。而实际上Spring Cloud Config添加认证的具体配置也和Eureka是基本相同的(只有客户端略微不同),服务端也是添加spring-boot-starter-security的依赖,然后在配置文件中指定spring.security.user.name和spring.security.user.password即可。

而客户端要访问服务端时,与Eureka类似,在配置文件中添加认证的账号密码,有两种方式:
1、修改spring.cloud.config.uri
将原来的“http://localhost:8090”改为“http://${userName}:${password}@localhost:8090”,如:

spring:
cloud:
config:
uri: http://user:password123@localhost:8090

2.使用spring.cloud.config.username和spring.cloud.config.password属性:

spring:
cloud:
config:
uri: http://localhost:8090
username: user
password: password123

注:以上两个同时配置的话,第二种的优先级要高于第一种。

    
二、动手实现Spring Cloud Config的安全认证

1、config server服务端
修改之前的microserver-config-server工程,为其添加spring-boot-starter-security依赖:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>microserver-config-server</artifactId>
<name>microserver-config-server</name>

<parent>
<groupId>com.microserver.cloud</groupId>
<artifactId>microserver-spring-cloud</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>

<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
</dependencies>

</project>

然后在application.yml,指定spring.security.user.name和spring.security.user.password:

server:
port: 8090
spring:
security:
user:
name: user
password: password123
cloud:
config:
server:
git:
uri: https://gitee.com/jackzhucoder/Spring-Cloud-Config-Test

此时我们重启microserver-config-server工程,发现会弹出认证的窗口:

【Spring Cloud总结】37.Spring Cloud Config的安全认证_spring cloud


输入上面配置的账号密码后,就可以进入服务端。

2、config client访问添加认证的服务端
在microserver-config-client工程中,我们修改bootstrap.yml配置文件(在这里配置了Config Server的访问信息),为其添加认证,我们选择添加spring.cloud.config.username和spring.cloud.config.password属性:

spring:
cloud:
config:
uri: http://localhost:8090
username: user
password: password123
profile: dev
label: master #如果ConfigServer的后端存储是Git,默认就为master

然后重启microserver-config-client工程,访问之前我们写的/profileType服务:

package com.microserver.cloud;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ConfigClientController {
@Value("${type}")
private String profileType;

@GetMapping("/profileType")
private String getProfileType() {
return this.profileType;
}
}

注:这里的${type},就是之前我们放在仓库里的默认dev配置文件的参数(通过bootstrap.yml配置文件中的profile: dev属性得知需获取dev类型的配置文件)。

访问结果:

【Spring Cloud总结】37.Spring Cloud Config的安全认证_security_02


发现访问成功,客户端与服务端之间在后台进行了一个认证的操作。

如果客户端的账号密码不正确,则在启动工程的时候,会出现取不到type值的异常(java.lang.IllegalArgumentException: Could not resolve placeholder 'type' in value "${type}"):

【Spring Cloud总结】37.Spring Cloud Config的安全认证_security.user_03


如果在客户端配置文件中配置了本地默认的type值,则会显示它(因为获取不到远程的参数,如果获取到了,远程的参数会覆盖本地配置)。

以上就是Spring Cloud Config的安全认证配置和使用。

参考:《51CTO学院Spring Cloud高级视频》

举报

相关推荐

0 条评论