分類  >  互聯網 >

一個Restful Api的訪問控制步驟

tags:    時間:2014-05-04 18:56:12
一個Restful Api的訪問控制方法

最近在做的兩個項目,都需要使用Restful Api,介面的安全性和訪問控制便成為一個問題,看了一下別家的API訪問控制辦法。

新浪的API訪問控制使用的是AccessToken,有兩種方式來使用該AccessToken:

1、API請求 URL 的後面加上一個AccessToken

2、Http頭裡面加一個欄位AccessToken=xxx

這種AccessToken是寫死在程序裡面的,在每次請求的時候附帶上,對於這種AccessToekn新浪那邊有過期時間,過期之後就無法再使用了。


很明顯這種方式是不安全的,一旦別人獲取到這個AccessToekn 就可以偽裝身份使用該API,這個訪問控制就形同虛設了。但是新浪也知道這一點,所以利用這種方式使用的介面都是較為基礎的介面,高級一點的介面需要使用Oauth 2.0進行二次認證的訪問控制。


在我的項目中,沒有像新浪微博賬號這種的用戶管理系統,做OAtuth認證不太合適,通過參考網上大神的資料,大致想了下面這種訪問控制的辦法。

1、為每個應用頒發一個賬號(user)和密碼(password),相當於(公鑰和私鑰)。

2、伺服器後台存儲該賬號和密碼(密文存儲 MD5加密)

3、應用端在通過HTTP請求該介面的時候,需要在HTTP HEADER 附帶下面幾個欄位

  • 時間date=unix時間戳
  • 簽名sign=sign
該sign的生成演算法是這樣的
String sign = HTTPMETHOD(GET/POST)+ api_uri(API的訪問URI)+date(即上面的UNIX時間戳)+length(發送body的數據長度)+password(後台頒發的密碼)
sign = MD5(sign)
sign = user+":"+sign
4、後台伺服器在接收到請求后
1、比對HTTP頭中的時間戳,比對伺服器時間,如果超過某個閾值,則拒絕訪問,同時返回請校準你的應用時間。
2、如果沒有超過時間閾值,則從sign中取出user然後在資料庫中查找對應的password,然後同樣根據上面的sign生成演算法,來生成sign進行身份認證,認證成功則執行API,失敗則返回認證失敗。

推薦閱讀文章

Bookmark the permalink ,來源:互聯網