你的Eureka服务注册中心安全吗?
在之前的章节我们讲到了/eureka-server.html,已经可以让我们自定义的微服务节点进行注册到该Eureka Server上,不过在注册过程中存在一个风险的问题,如果我们的Eureka Server的地址无意暴露在外,那岂不是通过Eureka协议创建的任意服务都可以进行注册到该Eureka Server吗?(当然如果你配置了服务器的安全组并且使用内网的IP地址或者主机名方式对外提供服务注册地址几乎不存在这个问题。)
本章目标
为Eureka Server穿上安全的外套,我的注册中心更安全。
构建项目
依然使用idea开发工具创建一个SpringBoot项目,在依赖的选择界面我们添加Eureka Server、Security相关依赖,pom.xml配置文件如下所示:
1 | //...省略部分内容 |
因为我们是用的是Spring Security作为安全组件,所以在这里需要添加spring-boot-starter-security依赖来完成安全相关组件的自动化配置以及实例化。
既然依赖已经添加好了,那么我们怎么配置安全用户呢?
开启注册中心安全配置
在添加安全配置之前,我们需要把Eureka Server的配置也一并添加上,如果你对Eureka Server配置不太了解,你可以查看/eureka-server.html阅读学习
配置文件的安全配置
修改application.yml配置文件内容,添加安全配置信息,如下所示:
1 | # 服务名称 |
安全相关的内容我们通过spring.security.user开头的参数进行配置,对应自动绑定spring-boot-starter-security依赖内的org.springframework.boot.autoconfigure.security.SecurityProperties属性实体类。
在SecurityProperties的内部类SecurityProperties.User内我们可以看到已经给我们生成了一个默认的name以及password
spring.security.user.name
用户名,默认值为user,配置Spring Security内置使用内存方式存储的用户名。spring.security.user.password
用户对应的密码,默认值为UUID随机字符串,配置Spring Security默认对应user用户的密码,该密码在系统启动时会在控制台打印,如果使用默认值可以运行查看控制台的输出内容。
开启Http Basic 安全认证
旧版本的Spring Security的依赖是可以在配置文件内容直接通security.basic.enabled参数进行开启basic认证,不过目前版本已经被废除,既然这种方式不可行,那我们就使用另外一种方式进行配置,通过继承WebSecurityConfigurerAdapter安全配置类来完成开启认证权限,配置类如下所示:
1 | /** |
如果你了解Spring Security那肯定对我们自定义的安全配置类SecurityConfiguration的内容不陌生,在SecurityConfiguration#configure方法内,我们禁用了csrf功能并且开启所有请求都需要通过basic方式进行验证。
到目前为止我们的
Eureka 注册中心的安全相关配置已经添加完成,那么我们的服务在进行注册时是不是也需要同步修改呢?
答案:肯定以及必须的不过服务注册时仅仅是微调,影响不太大,那么我们下面来看下该怎么调整。
注册服务时的安全配置
如果你对怎么把服务注册到Eureka Server不太了解,你可以阅读/eureka-register-service.html来进行学习,
我们只需要修改eureka.client.service-url.defaultZone配置的连接字符串内容即可,下面是修改前后的对比:
1 | // 修改前 |
修改后的api:node@这块的内容,前面是spring.security.user.name配置的值,而后面则是spring.security.user.password配置的值,@符号后面才是原本之前的Eureka Server的连接字符串信息。
对于上面的修改是不是很简单?
这也归功于Eureka的设计,安全方面也是netflix他们在研发过程中考虑到的一点,所以才会可以这么简单的集成Spring Security安全认证。
运行测试
本章的测试流程如下:
- 启动
Eureka Server(本章项目)- 启动
Eureka Client(可以自行创建一个服务节点,也可以直接使用/eureka-register-service.html源码进行测试。)- 访问
Eureka Server管理平台http://localhost:10000- 输入用户名
api以及密码node进行登录- 查看
服务注册列表
总结
我们本章为Eureka Server穿上了安全的外套,让它可以更安全,在文章开始的时候我说到了如果使用内网IP或者主机名方式进行服务注册时是几乎不存在安全问题的,如果你想你的服务注册中心更新安全,大可不必考虑你的服务注册方式都可以添加安全认证。
你的Eureka服务注册中心安全吗?

OAuth vs SAML vs OpenID
