【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的安全认证依赖:


   org.springframework.boot
   spring-boot-starter-security

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依赖:


  4.0.0
  microserver-config-server
  microserver-config-server
  
  
        com.microserver.cloud
        microserver-spring-cloud
        0.0.1-SNAPSHOT
    
  
  
    
        org.springframework.cloud
        spring-cloud-config-server
    
    
       org.springframework.boot
       spring-boot-starter-security
    

  

然后在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的安全认证_第1张图片
输入上面配置的账号密码后,就可以进入服务端。

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的安全认证_第2张图片
发现访问成功,客户端与服务端之间在后台进行了一个认证的操作。
如果客户端的账号密码不正确,则在启动工程的时候,会出现取不到type值的异常(java.lang.IllegalArgumentException: Could not resolve placeholder 'type' in value "${type}"):
【Spring Cloud总结】37.Spring Cloud Config的安全认证_第3张图片
如果在客户端配置文件中配置了本地默认的type值,则会显示它(因为获取不到远程的参数,如果获取到了,远程的参数会覆盖本地配置)。

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

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

转载请注明出处:https://blog.csdn.net/acmman/article/details/105616618

你可能感兴趣的:(Spring,Cloud,Spring,Cloud全面入门学习,spring,cloud,安全认证,security,security.user)