天天看點

15.26. 微服務安全解決方案

15.26. 微服務安全解決方案

Restful 的通信安全有很多中解決方案,例如

HTTP Basic Auth 認證

Cooke / Session 認證

Token 認證

Oauth / OpenID

等等,每一種方案都很成熟,這裡不依依解釋,如果不了解,請去搜尋引擎查找相關資料。這裡我談談在實施微服務項目中的心得,首先項目采用 Spring cloud 方案,Spring cloud 有自己的RestController 控制器,我們需要遵循他的規範開發,這就限制了很多傳統的認證加密方法不能應用到 Spring cloud中。

例如傳統restful 使用 POST 方式送出,POST 資料格式如下:

然後做 token 校驗。

而 Spring cloud 使用 raw 格式的資料做POST送出,例如

我們不想在Spring架構上做額外的改動,又想解決資訊的安全問題。

這個方案簡單,實施起來最為友善,因為項目比較緊急,是以就采用了這個方案,這個方案既可以在運維方處理,也可以在開發方處理,對于 Spring boot 隻需引入Spring Security 簡單配置,立即生效。

實作方式請參考:Spring boot with Spring security

上面的方案适合在防火牆内部的伺服器間通信,如果跨機房或者在廣域網上就不在安全了,通過嗅探器抓包,包括 http basic auth 的使用者和密碼,以及接口資料沒有安全可言。 為Web 伺服器增加 SSL 證書,可以解決資訊安全問提。

證書可以使用CA機構頒發的證書,也可以自己生成證書。

證書可以配置在Web伺服器上如Nginx, 實作方式請參考:http://www.netkiller.cn/www/nginx/conf.html#http2《Netkiller Web 手劄》

也可以配置在 Spring boot 中, 實作方式請參考:Spring boot with HTTPS SSL

這個方案可以滿足絕大部分使用者的需求。

由于需要為手機端提供 restful 服務,之前的方式已經不能滿足我們的需求,之前的方式更适合提供私有服務,不适合提供公共服務。所謂私有服務是指它的使用範圍限制在企業内部,或者事業部間共享服務,總的來說可以通過防火牆控制服務區域。

對于公共服務 OpenID/Oauth 更适合,我們不關心使用者地理位,終端裝置的情況。實作方式請參考:Spring boot with Oauth2

SSL 雙向認證

Oauth2 認證

這是我們最終的方案,雙向認證是伺服器與用戶端兩端都需要證書才能通信。

原文出處:Netkiller 系列 手劄

本文作者:陳景峯

轉載請與作者聯系,同時請務必标明文章原始出處和作者資訊及本聲明。