天天看點

如何保證微服務接口的安全? | 帶你讀《Spring Cloud Alibaba(2019)》之十一

上一篇:Gateway怎樣實作服務轉發? | 帶你讀《Spring Cloud Alibaba(2019)》之十 下一篇:如何動态請求參數網關? | 帶你讀《Spring Cloud Alibaba(2019)》之十二

本文來自于《精通Spring Cloud Alibaba》課程的整理,講師為餘勝軍,

點選檢視視訊内容

本文系志願者整理,供配合學習中心課程使用,不做商業用途。

如何保證微服務接口的安全

接口分為内網和外網接口

外網接口 基于OATUH2.0建構開放平台 比如appid、appsocet擷取accesstoken調用接口。

内網接口:都是目前内網中實作通訊,相對于來說比較安全的。

1、需要保證接口幂等性問題(基于Token)

2、接口采用安全加密傳輸 https協定

3、防止資料被篡改 md5驗證簽名

4、使用微服務網關實作Api授權認證等、黑名單白名單。

5、對我們的接口實作服務的保護 隔離、熔斷、降級等等。

最後使用apiswagger管理我們的微服務接口。

GateWay如何保證高可用和叢集

使用Nginx或者lvs虛拟vip通路增加系統的高可用

如何保證微服務接口的安全? | 帶你讀《Spring Cloud Alibaba(2019)》之十一

環境配置:

網關1 127.0.0.1:81

網關2 127.0.0.1:82

Nginx伺服器 127.0.0.1:80

網關過濾器相關配置

private String serverPort;

@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
    //如何擷取參數呢?
    String token = exchange.getRequest().getQueryParams().getFirst("token");
    if (StringUtils.isEmpty(token)) {
        ServerHttpResponse response = exchange.getResponse();
        response.setStatusCode(HttpStatus.INTERNAL_SERVER_ERROR);
        String msg = "token not is null ";
        DataBuffer buffer = response.bufferFactory().wrap(msg.getBytes());
        return response.writeWith(Mono.just(buffer));
    }
    // 在請求頭中存放serverPort serverPort
    ServerHttpRequest request = exchange.getRequest().mutate().header("serverPort", serverPort).build();
    return chain.filter(exchange.mutate().request(request).build());
}
           

Nginx相關配置

upstream mayiktgwadds {
  server 127.0.0.1:81;
  server 127.0.0.1:82;
}

server {
  listen 80;
  server_name  gw.mayikt.com;
  location / {
    proxy_pass http://mayiktgwadds/;
  }
}
           

會員服務擷取端口号:

如何保證微服務接口的安全? | 帶你讀《Spring Cloud Alibaba(2019)》之十一

執行結果:

如何保證微服務接口的安全? | 帶你讀《Spring Cloud Alibaba(2019)》之十一
如何保證微服務接口的安全? | 帶你讀《Spring Cloud Alibaba(2019)》之十一