開放API接口簽名驗證巡蘸,讓你的接口從此不再裸奔

接口安全問題

  • 請求身份是否合法?
  • 請求參數(shù)是否被篡改菲饼?
  • 請求是否唯一?

AccessKey&SecretKey (開放平臺)

請求身份

為開發(fā)者分配AccessKey(開發(fā)者標識列赎,確保唯一)和SecretKey(用于接口加密宏悦,確保不易被窮舉,生成算法不易被猜測)包吝。

防止篡改

參數(shù)簽名

  1. 按照請求參數(shù)名的字母升序排列非空請求參數(shù)(包含AccessKey)饼煞,使用URL鍵值對的格式(即key1=value1&key2=value2…)拼接成字符串stringA;
  2. 在stringA最后拼接上Secretkey得到字符串stringSignTemp诗越;
  3. 對stringSignTemp進行MD5運算砖瞧,并將得到的字符串所有字符轉換為大寫,得到sign值嚷狞。

請求攜帶參數(shù)AccessKeySign块促,只有擁有合法的身份AccessKey和正確的簽名Sign才能放行。這樣就解決了身份驗證和參數(shù)篡改問題床未,即使請求參數(shù)被劫持竭翠,由于獲取不到SecretKey(僅作本地加密使用,不參與網(wǎng)絡傳輸)薇搁,無法偽造合法的請求斋扰。

重放攻擊

雖然解決了請求參數(shù)被篡改的隱患,但是還存在著重復使用請求參數(shù)偽造二次請求的隱患啃洋。

timestamp+nonce方案

nonce指唯一的隨機字符串传货,用來標識每個被簽名的請求。通過為每個請求提供一個唯一的標識符宏娄,服務器能夠防止請求被多次使用(記錄所有用過的nonce以阻止它們被二次使用)问裕。

然而,對服務器來說永久存儲所有接收到的nonce的代價是非常大的孵坚×竿穑可以使用timestamp來優(yōu)化nonce的存儲貌踏。

假設允許客戶端和服務端最多能存在15分鐘的時間差,同時追蹤記錄在服務端的nonce集合窟勃。當有新的請求進入時,首先檢查攜帶的timestamp是否在15分鐘內逗堵,如超出時間范圍秉氧,則拒絕,然后查詢攜帶的nonce蜒秤,如存在已有集合汁咏,則拒絕。否則作媚,記錄該nonce攘滩,并刪除集合內時間戳大于15分鐘的nonce(可以使用redis的expire,新增nonce的同時設置它的超時失效時間為15分鐘)纸泡。

實現(xiàn)

請求接口:http://api.test.com/test?name=hello&home=world&work=java

  • 客戶端

    1. 生成當前時間戳timestamp=now和唯一隨機字符串nonce=random
    2. 按照請求參數(shù)名的字母升序排列非空請求參數(shù)(包含AccessKey)
      stringA="AccessKey=access&home=world&name=hello&work=java&timestamp=now&nonce=random";
    3. 拼接密鑰SecretKey
      stringSignTemp="AccessKey=access&home=world&name=hello&work=java&timestamp=now&nonce=random&SecretKey=secret";
    4. MD5并轉換為大寫
      sign=MD5(stringSignTemp).toUpperCase();
    5. 最終請求
      http://api.test.com/test?name=hello&home=world&work=java&timestamp=now&nonce=nonce&sign=sign;
  • 服務端

Token&AppKey(APP)

在APP開放API接口的設計中漂问,由于大多數(shù)接口涉及到用戶的個人信息以及產品的敏感數(shù)據(jù),所以要對這些接口進行身份驗證女揭,為了安全起見讓用戶暴露的明文密碼次數(shù)越少越好蚤假,然而客戶端與服務器的交互在請求之間是無狀態(tài)的,也就是說吧兔,當涉及到用戶狀態(tài)時磷仰,每次請求都要帶上身份驗證信息。

Token身份驗證

  1. 用戶登錄向服務器提供認證信息(如賬號和密碼)境蔼,服務器驗證成功后返回Token給客戶端灶平;
  2. 客戶端將Token保存在本地,后續(xù)發(fā)起請求時箍土,攜帶此Token逢享;
  3. 服務器檢查Token的有效性,有效則放行涮帘,無效(Token錯誤或過期)則拒絕拼苍。

安全隱患:Token被劫持,偽造請求和篡改參數(shù)调缨。

Token+AppKey簽名驗證

與上面開發(fā)平臺的驗證方式類似疮鲫,為客戶端分配AppKey(密鑰,用于接口加密弦叶,不參與傳輸)俊犯,將AppKey和所有請求參數(shù)組合成源串,根據(jù)簽名算法生成簽名值伤哺,發(fā)送請求時將簽名值一起發(fā)送給服務器驗證燕侠。這樣者祖,即使Token被劫持,對方不知道AppKey和簽名算法绢彤,就無法偽造請求和篡改參數(shù)七问。再結合上述的重發(fā)攻擊解決方案,即使請求參數(shù)被劫持也無法偽造二次重復請求茫舶。

實現(xiàn)

登陸和登出請求
后續(xù)請求
  • 客戶端
    和上述開放平臺的客戶端行為類似械巡,把AccessKey改為token即可。

  • 服務端

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末饶氏,一起剝皮案震驚了整個濱河市讥耗,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌疹启,老刑警劉巖古程,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異喊崖,居然都是意外死亡挣磨,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門贷祈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來趋急,“玉大人,你說我怎么就攤上這事势誊∥卮铮” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵粟耻,是天一觀的道長查近。 經常有香客問我,道長挤忙,這世上最難降的妖魔是什么霜威? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮册烈,結果婚禮上戈泼,老公的妹妹穿的比我還像新娘。我一直安慰自己赏僧,他們只是感情好大猛,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著淀零,像睡著了一般挽绩。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上驾中,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天唉堪,我揣著相機與錄音模聋,去河邊找鬼。 笑死唠亚,一個胖子當著我的面吹牛链方,可吹牛的內容都是我干的。 我是一名探鬼主播灶搜,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼侄柔,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了占调?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤移剪,失蹤者是張志新(化名)和其女友劉穎究珊,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體纵苛,經...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡剿涮,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了攻人。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片取试。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖怀吻,靈堂內的尸體忽然破棺而出瞬浓,到底是詐尸還是另有隱情,我是刑警寧澤蓬坡,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布猿棉,位于F島的核電站,受9級特大地震影響屑咳,放射性物質發(fā)生泄漏萨赁。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一兆龙、第九天 我趴在偏房一處隱蔽的房頂上張望杖爽。 院中可真熱鬧,春花似錦紫皇、人聲如沸慰安。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽泻帮。三九已至,卻和暖如春计寇,著一層夾襖步出監(jiān)牢的瞬間锣杂,已是汗流浹背脂倦。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留元莫,地道東北人赖阻。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像踱蠢,于是被迫代替她去往敵國和親火欧。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內容