Spring Cloud服務安全連接方式

Spring Cloud服務安全連接

Spring Cloud可以增加HTTP Basic認證來增加服務連接的安全性。

一、加入security啟動器

在maven配置文件中加入Spring Boot的security啟動器。

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

這樣,就開啟對服務連接的安全保護,系統默認為生成一個用戶名為”user”及一個隨機密碼,隨機密碼在服務啟動的時候在日志中會打印出來。

二、自定義用戶名密碼

隨機密碼沒什麼實際意義,我們需要一個固定的連接用戶名和密碼。

在應用配置文件中加入以下配置即可。

security: 
  user: 
    name: admin
    password: admin123456

這樣配置完後在連接這個服務的時候就會要求輸入用戶名和密碼,如果認證失敗會返回401錯誤。

{
    "timestamp": 1502689874556,
    "status": 401,
    "error": "Unauthorized",
    "message": "Bad credentials",
    "path": "/test/save"
}

三、安全連接

1、註冊中心安全連接

username:password@ipaddress

2、Feign申明式服務安全連接

@FeignClient(name = "SERVICE", configuration = FeignAuthConfig.class)
public interface OrderService extends OrderAPI {
}
@Configuration
public class FeignAuthConfig {
    @Bean
    public BasicAuthRequestInterceptor basicAuthRequestInterceptor() {
        return new BasicAuthRequestInterceptor("admin","admin123456");
    }
}

Spring Cloud微服務安全

  • JWT – 網絡安全第一站
  • CORS – 跨域安全解決
  • Spring Security – 服務安全衛士

一、JWT介紹

JWT的身份認證:

1、JWT全稱 – JSON Web Token

2、JWT主要用於身份認證和信息加密

3、JWT是一個簡單而有效的安全認證方式

二、JWT進階特性

1、JWT可以攜帶數據進行傳輸,方便後端使用

2、JWT可以對傳輸數據進行簽名,增加安全性

三、JWT組成

1、Header:存儲關於簽名算法的信息

2、Payload:存儲信息

3、Signature:header + payload + 秘鑰做一次hash256加密

四、在網關模塊,配置請求過濾的邏輯

1、驗證Token有效性

2、解析出JWT中的payload

3、是否需要驗簽

4、判斷userId是否有效

五、CORS(跨域資源共享)

1、跨域資源共享:Cross-origin、resource sharing

2、域:當一個請求的協議、域名和端口三者之一不同即為跨域

3、在網關配置跨域資源的請求過濾,配置資源共享的方式和目標方

4、缺陷:如果出現跨域策略不足的情況,需要修改代碼,重新部署(代價大)->Nginx(可選方案)

六、Eureka Server安全問題(Spring Security)

1、Spring Cloud默認可以使用Spring Security進行身份驗證

2、Eureka Server可以使用Spring Security建立安全連接

3、Spring Cloud新版默認會開啟CSRF防禦(可關閉),會導致一些錯誤

4、步驟:添加依賴包、配置註冊中心的用戶名和密碼

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。

推薦閱讀: