2013-02-07 105 views
1

我正在爲Windows Phone和Android創建應用程序。所以現在我正在構建一個他們都可以使用的webapi,但是我想要保證它不是那麼容易,那麼我的應用程序就可以使用它。我該如何解決它?沒有其他人,我的應用程序將訪問這些API。如何爲我的應用程序保護在線API?

我不想實施OAuth。

我有兩個場景是我在想:

首先(我保存的用戶名和散列在客戶端上的密碼):

  • 基本認證通過HTTPS/SSL , 而已。

(我的accessToken存儲在客戶端上):

  • 基本認證通過HTTPS/SSL接收訪問令牌。
  • 爲了獲得訪問令牌,用戶發送請求令牌的請求,該令牌驗證客戶端和服務器都知道clientsecret。
  • 每個調用的accessToken必須與被髮送到檢查訪問API

的問題,因爲我看到的第二種方法是服務器發送的accessToken到客戶端,如果任何人從哪裏得到這一點,他們將有用戶的訪問權限。

它是如何在現實世界中完成的?在客戶端

  • 商店的用戶名和密碼
  • 基本認證通過HTTPS

上存儲的口令哈希

回答

1

你可以使用的首先稍微修改客戶端,然後發送散列並將其與數據庫中的散列進行比較相當於存儲純文本pas因爲這個哈希變成了密碼。所以,你的應用程序應該像使用任何人類用戶那樣使用用戶名和密碼進行認證。

但您對第二種方法的關注也適用。如果有人攔截了這封郵件,他有你的憑據。

更安全的解決方案是HMAC認證(現在我們正在談論「現實世界」)。

  • 用戶具有祕密密鑰被存儲在服務器和客戶端
  • 每個請求被規範化(轉化爲不同的串,其中包含請求的方法,URI,參數和時間戳)
  • 使用密鑰將規範化的請求與HMAC進行散列,散列和用戶標識在服務器上的HTTP 標頭
  • 中傳遞,使用相同算法(具有來自HTTP標頭的時間戳)生成散列並與發送的哈希。
  • 如果結果是相等的,該請求被認證

一個例子是Amazon S3 REST API - 鏈接的文件也是一個很好的例子,如何實現它自己的API。