如何保證外網開放接口的安全性。
1.使用加簽名方式,防止數據篡改。
2.信息加密與密鑰管理,AES加密。
3.搭建OAuth2.0認證授權,授權之后獲取accessToken。
4.使用令牌方式,先獲取token,帶着token發送請求。
5.搭建網關實現黑名單和白名單。
一、令牌方式搭建搭建API開放平台
方案設計:
1.第三方機構申請一個appId,通過appId去獲取accessToken,每次請求獲取accessToken都要把老的accessToken刪掉
2.第三方機構請求數據需要加上accessToken參數,每次業務處理中心執行業務前,先去dba持久層查看accessToken是否存在(可以把accessToken放到redis中,這樣有個過期時間的效果),存在就說明這個機構是合法,無需要登錄就可以請求業務數據。不存在說明這個機構是非法的,不返回業務數據。
3.好處:無狀態設計,每次請求保證都是在我們持久層保存的機構的請求,如果有人盜用我們accessToken,可以重新申請一個新的taken.
二、基於OAuth2.0協議方式
原理:
主流分為商家自研和ISV(獨立軟件開發商,應用服務商)模式
商家自研,基本是自己的店鋪商戶,子公司等。平台提供應用掛店鋪的形式。一個應用可以掛多個店鋪
ISV模式,同樣一個應用掛多個店鋪,是獨立軟件供應商,提供應用服務。平台在應用服務市場提供購買服務產品,商家購買服務后方可使用。
流程:
1、應用服務商(商家自研)提供授權連接(參數appId:應用服務商應用ID,appSecret:秘鑰,自帶參數state,回調時帶回,回調地址),訪問到平台進入平台授權登錄。
2、登錄成功,回調應用服務商,此時應用服務商回調地址為應用配置的回調地址或者授權時連接中配置回調(return_url=http//)地址。
3、回調時,返回自帶參數和code,code2分鍾有效。
4、通過appId,code來獲取,openid(client_id店鋪id),店鋪信息,accessToken,refreshToken,accessTokenExpireTime過期時間。
accessToken一天或者一周有效,refreshToken一周+1天有效或者一個月有效。
5、如果沒有店鋪信息,則通過獲取店鋪信息結果獲取,通過openid(client_id)獲取店鋪信息。
三、信息加密與密鑰管理
- 單向散列加密
- 對稱加密
- 非對稱加密
- 安全密鑰管理
1、發放加密key,按照規則加密參數,參數暴露,加密sign驗證來源。
2、RSA加密是一種非對稱加密,發放公鑰私鑰。
3、AES加密,發放加密key,參數非暴露,通過傳入的client_id進行參數解密。
四、白名單驗證
1、在操作系統層面,配置 iptables,拒絕指定 IP 的網絡請求。
2、在 Web Server 層面,通過 Nginx 自身的 deny 選項 或者 lua 插件 配置 IP 黑名單。
3、在應用層面,在請求服務之前檢查一遍客戶端 IP 是否在黑名單(服務網關)。