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