簡體   English   中英

REST Web服務和API密鑰

[英]REST web service and API keys

我有一個Web服務,我正在向用戶提供進入我的應用程序數據庫並獲取一些信息。 用戶必須注冊API密鑰並在提出請求時提供。 一切正常,但我如何檢查注冊密鑰的用戶是否實際提出請求而不是他可能已經提供密鑰的其他人?

在過去的兩天里,我一直在考慮提出一個解決方案,但到目前為止還沒有。

您需要使用已簽名的請求。 基本上它的工作原理如下:

  • 您為用戶提供了一個API密鑰一個只有您和客戶知道的“秘密”(隨機字符串)。
  • 每當他們發出請求時,他們都會向其添加“簽名”參數。 此簽名基本上是請求參數的散列+ API密鑰+其他參數(見下文)+秘密。
  • 既然你也知道這個秘密,你可以驗證簽名是否正確。

為了避免重放攻擊,您還可以在混合中添加隨機數和時間戳。 nonce只是一個必須在每個請求上由客戶端遞增的數字。 當您收到請求時,檢查您之前是否已收到此nonce / timestamp。 如果您這樣做,則拒絕該請求(因為它很可能是重播攻擊)。 如果沒有,則將nonce / timestamp存儲在數據庫中,以便以后查找。

這或多或少是在OAuth中簽署請求的方式。 看看他們在鏈接中的例子。

驗證REST API調用有兩個部分。 當用戶注冊您的服務時,您通常會分配一個標識該用戶的KEY。 有時,這就足夠了。 但是這個KEY可以共享或被盜。 在這種情況下,您的服務仍將認為KEY有效。 現在,為了防止關鍵劫持等,您還將分發一個密鑰。 永遠不會使用REST API請求傳輸此密鑰。 此密鑰用於執行API請求的單向散列,並創建簽名(HMAC)。

然后將此簽名以及API請求(URL形式的HTTP請求)發送到API服務器。 服務器執行URL的單向散列,並使用此用戶的私鑰與簽名進行比較。 如果它們匹配,則“假定”請求者可以訪問私鑰,因此請求有效。

為了避免重放攻擊,除了nonce(如前一張海報所示),您還可以使用哈希鏈接。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM