API 授權(quán)與驗(yàn)證機(jī)制
概覽
傳統(tǒng) API 而言,授權(quán)與驗(yàn)證機(jī)制一直是被高度重視的安全問題之一,API 安全一直是被開發(fā)者們所討論。SUBMAIL API 在設(shè)計(jì)之初便已將 API 安全問題融入到我們的 DNA 。
SUBMAIL 有兩種驗(yàn)證方式:密匙明文驗(yàn)證模式和數(shù)字簽名驗(yàn)證模式,選擇一種適合你生產(chǎn)環(huán)境的驗(yàn)證機(jī)制。
密匙明文驗(yàn)證模式
明文的密匙驗(yàn)證模式,這種驗(yàn)證方式在集成接入過程中非常高效。
要使用密匙明文驗(yàn)證模式,請?jiān)?signature
參數(shù) 中提交你的應(yīng)用密匙。
使用密匙明文驗(yàn)證模式時(shí),請忽略 timestamp 和 sign_type 參數(shù)
數(shù)字簽名驗(yàn)證模式
數(shù)字簽名驗(yàn)證模式,適用于安全要求較高的應(yīng)用。
數(shù)字簽名方法與規(guī)則
- 將所有提交的參數(shù)升序排列:僅單次提交的參數(shù),不包括
signature
字段升序(A-Z)排列 - 創(chuàng)建簽名字符串:以
"key=value"
+"&"(
連接符)+"key=value"
的方式連接所有參數(shù)。此簽名字符串類似與HTTP GET/POST
請求時(shí)的字符串。 - 創(chuàng)建簽名:在創(chuàng)建的字符串前后加上 APPID 和 APPKEY 拼接簽名字符串(以 PHP 為例:
string=appid.appkey.signature.appid.appkey
),然后使用md5(string)
或sha1(string)
創(chuàng)建簽名。
要使用數(shù)字簽名驗(yàn)證模式,請將 sign_type 參數(shù)設(shè)為 md5 或 sha1 , 然后將 signature 參數(shù)設(shè)為你計(jì)算的簽名字符串(作為參考,此簽名方法在 SUBMAIL SDK 中有完整的簽名創(chuàng)建方法和案例)
平臺提供兩套簽名驗(yàn)證方式,當(dāng)sign_version設(shè)置為2時(shí)則采用第二套計(jì)算方式,拼接規(guī)則不變,但部分參數(shù)將不再參與計(jì)算,具體參數(shù)計(jì)算說明請參考對應(yīng)api文檔中sign_version的參數(shù)說明。
Timestamp
UNIX 時(shí)間戳
如果你使用數(shù)字簽名方式,你需要在每條API 請求中加入 timestamp
UNIX 時(shí)間戳,且此參數(shù)將必須被包含在簽名字符串中,參與計(jì)算簽名。
UNIX 時(shí)間戳 是安全 API 請求中非常重要的概念,在 API 請求或簽名被創(chuàng)建之前,你需要從 SUBMAIL 服務(wù)器端獲取 UNIX 時(shí)間戳,并確保請求 UNIX 時(shí)間戳至發(fā)送請求的過程小于6秒。