SpringCloud組件:你的Eureka服務(wù)注冊(cè)中心安全嗎尾抑?

在之前的章節(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 ServerSecurity相關(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è)試流程如下:

  1. 啟動(dòng)Eureka Server(本章項(xiàng)目)
  2. 啟動(dòng)Eureka Client(可以自行創(chuàng)建一個(gè)服務(wù)節(jié)點(diǎn)臭挽,也可以直接使用SpringCloud組件:將微服務(wù)提供者注冊(cè)到Eureka服務(wù)中心源碼進(jìn)行測(cè)試捂襟。)
  3. 訪問Eureka Server管理平臺(tái) http://localhost:10000
  4. 輸入用戶名api以及密碼node進(jìn)行登錄
  5. 查看服務(wù)注冊(cè)列表

總結(jié)

我們本章為Eureka Server穿上了安全的外套,讓它可以更安全欢峰,在文章開始的時(shí)候我說到了如果使用內(nèi)網(wǎng)IP或者主機(jī)名方式進(jìn)行服務(wù)注冊(cè)時(shí)是幾乎不存在安全問題的葬荷,如果你想你的服務(wù)注冊(cè)中心更新安全,大可不必考慮你的服務(wù)注冊(cè)方式都可以添加安全認(rèn)證赤赊。

源碼位置

作者個(gè)人 博客
使用開源框架 ApiBoot 助你成為Api接口服務(wù)架構(gòu)師

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末抛计,一起剝皮案震驚了整個(gè)濱河市哄孤,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌吹截,老刑警劉巖瘦陈,帶你破解...
    沈念sama閱讀 212,816評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異波俄,居然都是意外死亡晨逝,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門懦铺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來捉貌,“玉大人,你說我怎么就攤上這事冬念〕们裕” “怎么了?”我有些...
    開封第一講書人閱讀 158,300評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵急前,是天一觀的道長醒陆。 經(jīng)常有香客問我,道長裆针,這世上最難降的妖魔是什么刨摩? 我笑而不...
    開封第一講書人閱讀 56,780評(píng)論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮世吨,結(jié)果婚禮上澡刹,老公的妹妹穿的比我還像新娘。我一直安慰自己耘婚,他們只是感情好罢浇,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評(píng)論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著边篮,像睡著了一般己莺。 火紅的嫁衣襯著肌膚如雪奏甫。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,084評(píng)論 1 291
  • 那天凌受,我揣著相機(jī)與錄音阵子,去河邊找鬼。 笑死胜蛉,一個(gè)胖子當(dāng)著我的面吹牛挠进,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播誊册,決...
    沈念sama閱讀 39,151評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼领突,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了案怯?” 一聲冷哼從身側(cè)響起君旦,我...
    開封第一講書人閱讀 37,912評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎嘲碱,沒想到半個(gè)月后金砍,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,355評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡麦锯,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評(píng)論 2 327
  • 正文 我和宋清朗相戀三年恕稠,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片扶欣。...
    茶點(diǎn)故事閱讀 38,809評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡鹅巍,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出料祠,到底是詐尸還是另有隱情骆捧,我是刑警寧澤,帶...
    沈念sama閱讀 34,504評(píng)論 4 334
  • 正文 年R本政府宣布术陶,位于F島的核電站凑懂,受9級(jí)特大地震影響煤痕,放射性物質(zhì)發(fā)生泄漏梧宫。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評(píng)論 3 317
  • 文/蒙蒙 一摆碉、第九天 我趴在偏房一處隱蔽的房頂上張望塘匣。 院中可真熱鬧,春花似錦巷帝、人聲如沸忌卤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽驰徊。三九已至笤闯,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間棍厂,已是汗流浹背颗味。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評(píng)論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留牺弹,地道東北人浦马。 一個(gè)月前我還...
    沈念sama閱讀 46,628評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像张漂,于是被迫代替她去往敵國和親晶默。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容