在之前的章節(jié)我們講到了SpringCloud組件:搭建Eureka服務(wù)注冊(cè)中心侮邀,已經(jīng)可以讓我們自定義的微服務(wù)節(jié)點(diǎn)
進(jìn)行注冊(cè)到該Eureka Server
上念链,不過在注冊(cè)過程中存在一個(gè)風(fēng)險(xiǎn)的問題虱朵,如果我們的Eureka Server
的地址無意暴露在外,那豈不是通過Eureka
協(xié)議創(chuàng)建的任意服務(wù)
都可以進(jìn)行注冊(cè)到該Eureka Server
嗎钓账?(當(dāng)然如果你配置了服務(wù)器的安全組
并且使用內(nèi)網(wǎng)的IP地址
或者主機(jī)名
方式對(duì)外提供服務(wù)注冊(cè)地址
幾乎不存在這個(gè)問題碴犬。)
本章目標(biāo)
為Eureka Server
穿上安全的外套,我的注冊(cè)中心更安全梆暮。
構(gòu)建項(xiàng)目
依然使用idea
開發(fā)工具創(chuàng)建一個(gè)SpringBoot
項(xiàng)目服协,在依賴的選擇界面我們添加Eureka Server
、Security
相關(guān)依賴啦粹,pom.xml
配置文件如下所示:
//...省略部分內(nèi)容
<dependencies>
<!--Eureka服務(wù)端-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<!--添加安全認(rèn)證-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
//...省略部分內(nèi)容
因?yàn)槲覀兪怯玫氖?code>Spring Security作為安全組件偿荷,所以在這里需要添加spring-boot-starter-security
依賴來完成安全相關(guān)組件
的自動(dòng)化配置以及實(shí)例化
窘游。
既然依賴已經(jīng)添加好了,那么我們?cè)趺磁渲冒踩脩裟兀?/p>
開啟注冊(cè)中心安全配置
在添加安全配置之前跳纳,我們需要把Eureka Server
的配置也一并添加上忍饰,如果你對(duì)Eureka Server
配置不太了解,你可以查看SpringCloud組件:搭建Eureka服務(wù)注冊(cè)中心閱讀學(xué)習(xí)
配置文件的安全配置
修改application.yml
配置文件內(nèi)容寺庄,添加安全配置信息艾蓝,如下所示:
# 服務(wù)名稱
spring:
application:
name: hengboy-spring-cloud-eureka-security
# 安全參數(shù)配置
security:
user:
name: api
password: node
roles: SERVICE_NODE
# eureka配置
eureka:
client:
service-url:
defaultZone: http://localhost:${server.port}/eureka/
fetch-registry: false
register-with-eureka: false
# 端口號(hào)
server:
port: 10000
安全相關(guān)的內(nèi)容我們通過spring.security.user
開頭的參數(shù)進(jìn)行配置,對(duì)應(yīng)自動(dòng)綁定spring-boot-starter-security
依賴內(nèi)的org.springframework.boot.autoconfigure.security.SecurityProperties
屬性實(shí)體類斗塘。
在SecurityProperties
的內(nèi)部類SecurityProperties.User
內(nèi)我們可以看到已經(jīng)給我們生成了一個(gè)默認(rèn)的name
以及password
-
spring.security.user.name
用戶名赢织,默認(rèn)值為user
,配置Spring Security
內(nèi)置使用內(nèi)存方式存儲(chǔ)
的用戶名馍盟。 -
spring.security.user.password
用戶對(duì)應(yīng)的密碼于置,默認(rèn)值為UUID隨機(jī)字符串
,配置Spring Security
默認(rèn)對(duì)應(yīng)user
用戶的密碼贞岭,該密碼在系統(tǒng)啟動(dòng)時(shí)會(huì)在控制臺(tái)打印
八毯,如果使用默認(rèn)值可以運(yùn)行查看控制臺(tái)的輸出內(nèi)容。
開啟Http Basic 安全認(rèn)證
舊版本的Spring Security
的依賴是可以在配置文件內(nèi)容直接通security.basic.enabled
參數(shù)進(jìn)行開啟basic
認(rèn)證瞄桨,不過目前版本已經(jīng)被廢除
话速,既然這種方式不可行,那我們就使用另外一種方式進(jìn)行配置讲婚,通過繼承WebSecurityConfigurerAdapter
安全配置類來完成開啟認(rèn)證權(quán)限尿孔,配置類如下所示:
/**
* 開啟Eureka Server安全認(rèn)證配置
*
* @author:于起宇 <p>
* ================================
* Created with IDEA.
* Date:2018/9/28
* Time:5:42 PM
* 簡(jiǎn)書:http://www.reibang.com/u/092df3f77bca
* 碼云:https://gitee.com/hengboy
* GitHub:https://github.com/hengyuboy
* ================================
* </p>
*/
@Configuration
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
/**
* 配置安全信息
* - 禁用csrf攻擊功能
* - 開啟所有請(qǐng)求需要驗(yàn)證并且使用http basic進(jìn)行認(rèn)證
*
* @param http
* @throws Exception
*/
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf()
.disable()
.authorizeRequests()
.anyRequest().authenticated()
.and()
.httpBasic();
}
}
如果你了解Spring Security
那肯定對(duì)我們自定義的安全配置類SecurityConfiguration
的內(nèi)容不陌生俊柔,在SecurityConfiguration#configure
方法內(nèi)筹麸,我們禁用了csrf
功能并且開啟所有請(qǐng)求都需要通過basic
方式進(jìn)行驗(yàn)證。
到目前為止我們的
Eureka 注冊(cè)中心
的安全相關(guān)配置已經(jīng)添加完成雏婶,那么我們的服務(wù)在進(jìn)行注冊(cè)時(shí)是不是也需要同步修改呢物赶?
答案:肯定以及必須的
不過服務(wù)注冊(cè)時(shí)僅僅是微調(diào),影響不太大留晚,那么我們下面來看下該怎么調(diào)整酵紫。
注冊(cè)服務(wù)時(shí)的安全配置
如果你對(duì)怎么把服務(wù)注冊(cè)到Eureka Server
不太了解,你可以閱讀SpringCloud組件:將微服務(wù)提供者注冊(cè)到Eureka服務(wù)中心來進(jìn)行學(xué)習(xí)错维,
我們只需要修改eureka.client.service-url.defaultZone
配置的連接字符串內(nèi)容即可奖地,下面是修改前后的對(duì)比:
// 修改前
# 配置Eureka Server 信息
eureka:
client:
service-url:
defaultZone: http://localhost:10000/eureka/
// 修改后
# 配置Eureka Server 信息
eureka:
client:
service-url:
defaultZone: http://api:node@localhost:10000/eureka/
修改后的api:node@
這塊的內(nèi)容,前面是spring.security.user.name
配置的值赋焕,而后面則是spring.security.user.password
配置的值参歹,@
符號(hào)后面才是原本之前的Eureka Server
的連接字符串信息。
對(duì)于上面的修改是不是很簡(jiǎn)單隆判?
這也歸功于Eureka
的設(shè)計(jì)犬庇,安全方面也是netflix
他們?cè)谘邪l(fā)過程中考慮到的一點(diǎn)僧界,所以才會(huì)可以這么簡(jiǎn)單的集成Spring Security
安全認(rèn)證。
運(yùn)行測(cè)試
本章的測(cè)試流程如下:
- 啟動(dòng)
Eureka Server
(本章項(xiàng)目)- 啟動(dòng)
Eureka Client
(可以自行創(chuàng)建一個(gè)服務(wù)節(jié)點(diǎn)
臭挽,也可以直接使用SpringCloud組件:將微服務(wù)提供者注冊(cè)到Eureka服務(wù)中心源碼進(jìn)行測(cè)試捂襟。)- 訪問
Eureka Server
管理平臺(tái)http://localhost:10000
- 輸入用戶名
api
以及密碼node
進(jìn)行登錄- 查看
服務(wù)注冊(cè)列表
總結(jié)
我們本章為Eureka Server
穿上了安全的外套,讓它可以更安全欢峰,在文章開始的時(shí)候我說到了如果使用內(nèi)網(wǎng)IP
或者主機(jī)名
方式進(jìn)行服務(wù)注冊(cè)時(shí)是幾乎不存在安全問題
的葬荷,如果你想你的服務(wù)注冊(cè)中心
更新安全,大可不必考慮你的服務(wù)注冊(cè)方式
都可以添加安全認(rèn)證赤赊。
源碼位置
- SpringBoot配套源碼地址:訪問碼云查看源碼闯狱、訪問GitHub查看源碼
- SpringCloud配套源碼地址(
本章源碼在這
):訪問碼云查看源碼,訪問GitHub查看源碼