Web API接口的通路方式,大概可以分為幾類:
1)一個是使用使用者令牌,通過Web API接口進行資料通路。這種方式,可以有效識别使用者的身份,為使用者接口傳回使用者相關的資料,如包括使用者資訊維護、密碼修改、或者使用者聯系人等與使用者身份相關的資料。
2)一種是使用安全簽名進行資料送出。這種方式送出的資料,URL連接配接的簽名參數是經過安全一定規則的加密的,伺服器收到資料後也經過同樣規則的安全加密,确認資料沒有被中途篡改後,再進行資料修改處理。是以我們可以為不同接入方式,如Web/APP/Winfrom等不同接入方式指定不同的加密秘鑰,但是秘鑰是雙方約定的,并不在網絡連接配接上傳輸,連接配接傳輸的一般是這個接入的AppID,伺服器通過這個AppID來進行簽名參數的加密對比,這種方式,類似微信背景的回調處理機制,它們就是經過這樣的處理。
3)一種方式是提供公開的接口調用,不需要傳入使用者令牌、或者對參數進行加密簽名的,這種接口一般較少,隻是提供一些很正常的資料顯示而已。
下面圖示就是這幾種接入方式的說明和大概應用場景。

首先我們為使用者注冊的時候,需要由我們認可的終端發起,也就是它們需要進行安全簽名,背景确認簽名有效性,才能正常實作使用者注冊,否則遭到僞造資料,系統就失去原有的意義了。
其實我們獲得使用者的令牌,也是需要進行使用者安全簽名認證的,這樣我們才有效保證使用者身份令牌擷取的合法性。
上面介紹到的參數,我們提及了幾個參數,一個是加密簽名字元串,一個是時間戳,一個是随機數,一個是應用接入ID,我們一般的處理規則如下所示。
1)Web API 為各種應用接入,如APP、Web、Winform等接入端配置設定應用AppID以及通信密鑰AppSecret,雙方各自存儲。
2)接入端在請求Web API接口時需攜帶以下參數:signature、 timestamp、nonce、appid,簽名是根據幾個參數和加密秘鑰生成。
3) Web API 收到接口調用請求時需先檢查傳遞的簽名是否合法,驗證後才調用相關接口。
加密簽名在服務端(Web API端)的驗證流程參考微信的接口的處理方式,處理邏輯如下所示。
1)檢查timestamp 與系統時間是否相差在合理時間内,如10分鐘。
2)将appSecret、timestamp、nonce三個參數進行字典序排序
3)将三個參數字元串拼接成一個字元串進行SHA1加密
4)加密後的字元串可與signature對比,若比對則辨別該次請求來源于某應用端,請求是合法的。
C#端代碼校驗如下所示。
一旦我們完成對安全簽名進行成功認證,也就是我們對資料送出的來源和完整性進行了确認,就可以進行更多和安全性相關的操作了,如擷取使用者的通路令牌資訊的操作如下所示。
第一步是驗證使用者的簽名是否符合要求,符合要求後進行使用者資訊的比對,并生成使用者通路令牌資料JSON,傳回給調用端即可。
由于Web API的調用,都是一種無狀态方式的調用方式,我們通過token來傳遞我們的使用者資訊,這樣我們隻需要驗證Token就可以了。
JWT的令牌生成邏輯如下所示
令牌生成後,我們需要在Web API調用處理前,對令牌進行校驗,確定令牌是正确有效的。
檢查的代碼,就是把令牌生成的過程逆反過來,擷取相應的資訊,并且對令牌簽發的時間進行有效性判斷,一般可以約定一個失效時間,如1天或者7天,也不用設定太短。
一般來說,通路令牌不能永久有效,對于通路令牌的重新更新問題,可以設定一個規則,隻允許最新的令牌使用,并把它存儲在接口緩存裡面進行對比,應用系統退出的時候,就把記憶體裡面的Token移除就可以了。
上面我們定義了一般的Web API接口,以及實作相應的業務實作,如果我們需要建立Web API層,還需要建構一個Web API項目的。
建立好相應的項目後,可以為項目添加一個Web API基類,友善控制共同的接口。
然後我們就可以在Controller目錄上建立更多的應用API控制器了。
最後我們為了統一所有的API接口都是傳回JSON方式,我們需要對WebApiConfig裡面的代碼進行設定下。
接下來我們要做的就是需要增加業務接口,以便進行具體的測試了,建議使用Winform項目,對每個接口進行一個測試,或者也可以考慮使用單元測試的方式,看個人喜好吧。
例如我們如果要測試使用者登陸的接口的話,我們的測試代碼如下所示。
如果我們已經獲得了令牌,我們根據令牌傳遞參數給連接配接,并擷取其他資料的測試處理代碼如下所示。
如果需要POST資料的話,那麼調用代碼如下所示。
Web API背景,會自動把POST的JSON資料轉換為對應的對象的。
如果是GET方式,我們可能可以直接通過浏覽器進行調試,如果是POST方式,我們需要使用一些協助工具,如Fiddler等處理工具,但是最好的方式是自己根據需要弄一個測試工具,友善測試。
以下就是我為了自己Web API 接口開發的需要,專門弄的一個調試工具,可以自動組裝相關的參數,包括使用安全簽名的參數,還可以把所有參數資料進行存儲。
轉:http://www.cnblogs.com/wuhuacong/p/4620300.html
本文轉自左正部落格園部落格,原文連結:http://www.cnblogs.com/soundcode/p/4843955.html,如需轉載請自行聯系原作者