接口鉴权
積分加分API使用簽名方法(Signature)對接口進行鑒權。每一次調用積分加分接口的請求都需要在請求中包含簽名信息,以驗證用戶身份。
在第一次使用積分系統加分API之前,需要向積分系統申請安全憑證,安全憑證包括SecretId和SecretKey,SecretId是用來標識API調用者的身份,SecretKey是用于加密簽名字符串和服務器驗證簽名字符串的密鑰。SecretKey必須嚴格保管,避免泄露。已有安全憑證的系統(用戶)可以從生成簽名開始操作。
申請安全憑證
其他系統第一次使用積分系統進行加分必須先申請安全憑證才可以使用。
- 由系統負責人郵件通知積分系統后臺管理員,申請調用積分的加分接口
- 積分系統管理員進入積分系統后臺,選擇【權限管理】,進入【合作項目】頁面,點擊【添加項目】
- 在【新建應用】對話框中,【項目id】由積分系統后臺自動生成,由積分系統管理員根據郵件內容輸入【項目名稱】,點擊【獲取】按鈕,由系統自動生成SecretId ,SecretKey。
- 積分系統管理員郵件通知申請調用加分的系統申請得到的SecretId ,SecretKey,并附加confluence接口調用文檔地址,以供其調用。
生成簽名串
其他系統得到了上一步申請安全憑證,假設生成的的 SecretId 和 SecretKey 分別是:
? SecretId:AKIDz8krbsJ5yKBZQpn74WFkmLPx3gnPhESA。
? SecretKey:Gu5t9xGARNpq86cd98joQYCN3Cozk1qA
調用積分系統加分減分接口 addIntegral請求,請求參數為:
| 參數 | 參數寫法 |
|---|---|
| 方法名 | Action =addIntegral |
| 密鑰ID | SecretId= AKIDz8krbsJ5yKBZQpn74WFkmLPx3gnPhESA |
| 當前時間戳 | Timestamp =1465185768 |
| 隨機正整數 | Nonce=11886 |
| 加分人的唯一標識id/項目的唯一標識id | givingUserId= 1071008930039197698 |
| 被加分人的唯一標識id列表 | idInfo= [ “1071008926490816514”, “1071008929686876162” ] |
| 加分/減分分值 | Integral= 10 |
| 項目id | pluginId= kernel-free |
| 加分類型 | primaryId= 1 |
| 加分理由 | Reason=積極主動,表現優秀,為公司做出突出貢獻 |
| 被加分人唯一標識id | userId |
對參數排序
對請求參數按參數名做字典序升序排列,結果如下:
{
‘Action’ : ‘addIntegral’,
‘givingUserId’:‘1071008930039197698’,
‘idInfo’:’[
“1071008926490816514”,
“1071008929686876162”
]’,
‘integral’:10,
‘Nonce’ : 11886,
‘pluginId’:‘kernel-free’,
‘primaryId’:‘1’,
‘reason’:‘積極主動,表現優秀,為公司做出突出貢獻’,
‘SecretId’ : ‘AKIDz8krbsJ5yKBZQpn74WFkmLPx3gnPhESA’,
‘Timestamp’ : 1465185768,
‘userId’:’’,
}
拼接請求字符串
把上一步排序好的請求參數,格式化成k=v,然后用“&”拼接在一起,注意v為原始值而非url編碼后的值,結果
Action=addIntegral&givingUserId:1071008930039197698&idInfo:[“1071008926490816514”,“1071008929686876162”]&integral:10&Nonce=11886,&pluginId=kernel-free&primaryId=1&v&reason=積極主動,表現優秀,為公司做出突出貢獻&SecretId=AKIDz8krbsJ5yKBZQpn74WFkmLPx3gnPhESA&Timestamp=1465185768
拼接簽名原文字符串
拼接簽名原文時需要如下參數:
? 請求方法:支持POST方式,這里使用POST請求,注意方法為全大寫。
? 請求主機:dmsdbj.com,詳見各接口詳細說明
? 請求路徑:kernel-web/integral/addIntegral
? 請求字符串:上一步生成的
Action=addIntegral&givingUserId:1071008930039197698&idInfo:[“1071008926490816514”,“1071008929686876162”]&integral:10&Nonce=11886,&pluginId=kernel-free&primaryId=1&v&reason=積極主動,表現優秀,為公司做出突出貢獻&SecretId=AKIDz8krbsJ5yKBZQpn74WFkmLPx3gnPhESA&Timestamp=1465185768
簽名原文的拼接規則為:
請求方法+請求主機+請求路徑+?+請求字符串
拼接結果如下
POSTdmsdbj.com/kernel-web/integral/addIntegral?
Action=addIntegral&givingUserId:1071008930039197698&idInfo:[“1071008926490816514”,“1071008929686876162”]&integral:10&Nonce=11886,&pluginId=kernel-free&primaryId=1&v&reason=積極主動,表現優秀,為公司做出突出貢獻&SecretId=AKIDz8krbsJ5yKBZQpn74WFkmLPx3gnPhESA&Timestamp=1465185768
生成簽名串
- 使用HMAC-SHA1 算法對上面步驟中獲得的 簽名原文字符串 進行簽名。
- 將生成的簽名串使用 Base64 進行編碼,獲得最終的簽名串。
以Java語言為例:
secretKey = ’ Gu5t9xGARNpq86cd98joQYCN3Cozk1qA ‘;
srcStr=’ POSTdmsdbj.com/kernel-web/integral/addIntegral?
Action=addIntegral&givingUserId:1071008930039197698&idInfo:[“1071008926490816514”,“1071008929686876162”]&integral:10&Nonce=11886,&pluginId=kernel-free&primaryId=1&v&reason=積極主動,表現優秀,為公司做出突出貢獻&SecretId=AKIDz8krbsJ5yKBZQpn74WFkmLPx3gnPhESA&Timestamp=1465185768’;
signStr = base64_encode(hash_hmac(‘sha1’, srcStr, secretKey, true));
得到的簽名串為:
HgIYOPcx5lN6gz8JsCFBNAWp2oQ=
添加簽名,發送請求
? 請求參數中添加Signature參數,參數值為上一步生成的簽名串,并且對簽名進行url編碼。上面生成的簽名HgIYOPcx5lN6gz8JsCFBNAWp2oQ=,編碼后為HgIYOPcx5lN6gz8JsCFBNAWp2oQ%3D
? 如果是使用GET方法,則對所有請求參數的參數值做URL編碼;若使用POST則除Signature參數外無需URL編碼
? 發送HTTPS協議請求即可得到JSON字符串格式的接口返回值
最終的請求URL為:
https://dmsdbj.com/kernel-web/integral/addIntegral
&Action=addIntegral&givingUserId:1071008930039197698,
&idInfo:[“1071008926490816514”,“1071008929686876162”]
&integral:10
&Nonce=11886,
&pluginId=kernel-free
&primaryId=1
&v&reason=積極主動,表現優秀,為公司做出突出貢獻
&SecretId=AKIDz8krbsJ5yKBZQpn74WFkmLPx3gnPhESA
&Signature=HgIYOPcx5lN6gz8JsCFBNAWp2oQ%3D
&Timestamp=1465185768
錯誤碼:
回調函數
<未完,待續更新>
總結
- 上一篇: 2019半年总结:Teams are p
- 下一篇: 【Linux系统】基础总结