API權限控制與安全管理


 

 摘自網上

一、API權限控制范圍

1、首先驗證web端請求參數:

(1)web請求參數:渠道、ServiceName、版本、Airline、時間戳(yyyyMMddhhmmssSSS)、reqXML、Language、簽名

       (2)請求不能為空,並且格式是否符合要求

2、驗證渠道+IP是否在白名單中:

    (1)API項目啟動時,將API_CHANNEL_INFO表數據,緩存到內存中

(2)根據Airline+渠道,去內存中取出授權服務器IP列表,並驗證請求IP是否在列表中

3、驗證簽名:

(1)Web請求簽名規則:Airline+”|”+渠道+”|”+版本+”|”+ServiceName+”|”+Language+”|”+Token+”|”+時間戳+”|”+reqXML

(2)根據Airline+渠道,去緩存中取出Token,再將Token解密取出來的Token是加密的,需要解密)

(3)API根據簽名規則拼字符串,並用SHA256算法加密,然后驗證web傳過來的簽名和API生成的簽名是否一致

4、驗證並發:

(1)先驗證單機總並發量(service級+version的並發)

(2)再驗證(渠道+service+version)的並發

(3)只做單機並發限制,默認認為每個服務器分的總並發數都是相同的

5、驗證service授權:

      (1)API項目啟動時,將service授權表數據,緩存到內存中

(3)根據Airline+渠道+ServiceName+版本,去內存里數據中取值,如果取到值,並且值中的STATUS狀態是可用,才說明該ServiceName有訪問權限

6、登錄接口調整:

      (1)判斷用戶名密碼是否正確:密碼在數據庫里是加鹽(鹽:賬號創建時間),再用sha256算法加密)

(2)驗證成功后,redis里需要存數據(KEY是渠道+userid,對應的值有logintime+lasttime),並設置超時時間(不同的渠道有自己的redis超時時間,超時時間值在API_CHANNEL_INFO表里存放)

(3)[1]

7、其它接口調整:

(1)API入口需要校驗請求的接口是否需要校驗登錄(在Service授權表中存放了每個接口是否需要校驗的標識)

(2)如果接口需要校驗登錄:要判斷userid在redis里是否存在。若不存在,要返回需要登錄的提示;若存在,需要更新redis里的lasttime,並且重置超時時間

(3)如果接口不需要驗證登錄,但是是已經登錄的情況下,也要去重置redis超時時間

8、備注:

(1)API需要一個刷緩存接口(刷新所有服務器上的緩存)

(2)需要RES底層提供API_CHANNEL_INFO、API_SERVICE_AUTH、API_SERVICE_INFO這3個表數據的接口 

 

二、數據庫

1、渠道信息表(API_CHANNEL_INFO) 

AIRLINE

字符串

航空公司二字碼,如:CA

CHANNEL

字符串

渠道

CHANNEL_TYPE

字符串

渠道類型

TOKEN

字符串

TOKEN

LOGIN_TIME_OUT

字符串

登錄超時時間

REQUEST_SERVER_IP

字符串

授權服務器IP列表,多個以;分隔

 

 

 

 

 

 

 

 

 

注:聯合主鍵是:AIRLINE+CHANNEL

 

2、Service授權表(API_SERVICE_AUTH)

AIRLINE

字符串

航空公司二字碼,如:CA

CHANNEL

字符串

渠道

SERVICE_NAME

字符串

請求操作類型

MAX_ASSIGN_NUM

字符串

最大並發數

IS_NEED_LOGIN

字符串

請求操作是否需要登錄:0或null需要,1不需要

VERSION

字符串

授權版本

STATUS

字符串

狀態(0 可用;1 不可用)

 

 

 

 

 

 

 

 

 

 

注:聯合主鍵是:AIRLINE+CHANNEL+SERVICE_NAME+VERSION

 

3、Service信息表(API_SERVICE_INFO)

AIRLINE

字符串

航空公司二字碼,如:CA

SERVICE_NAME

字符串

請求操作類型

MAX_ASSIGN_NUM

字符串

單機最大總並發數

VERSION

字符串

授權版本

 

 

 

 

 

 

注:聯合主鍵是:AIRLINE+SERVICE_NAME+VERSION

 



[1] 刪除此條變更。因為:假設兩個用戶ua(用戶名:user、密碼:pwd)、ub(用戶名:userb、密碼:pwdb)。a正常登錄系統。但b使用用戶名user登錄系統,則會登錄失敗。如果此時刪除對應的redis緩存的話,將會把a從系統中刪除,而不是b)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM