2012-08-09 64 views
1

我正在實施一個休息api來使用新的web api框架。這個API將被其他公司使用,所以我們將添加一個認證方法。Web api認證模式

在認證方面,我正在考慮實施基於標記的東西。這樣

  • 客戶端的東西提供憑據登錄方法
  • 系統的身份驗證客戶端,並將令牌
  • 客戶端使用此令牌在下列API調用

我不知道如果這個模式是有用的我的場景。操作主要是原子操作,基本上客戶端會定期ping這個api來獲取一些特定的數據,所以不知道是否有意義擁有會話標記(在某些時候標記應該過期並且不知道如何管理這個標記)。

你會如何推薦爲這種情況實現身份驗證模式?

+0

看看這個,使用HMAC認證:http://stackoverflow.com/questions/11830338/mvc-4-web-api-creating-api-keys/11831391#11831391 – 2012-08-09 15:58:03

回答

1

這樣做一個基於令牌的認證方案並不容易。

對於如何以一種安全有效的方式實現它,我沒有真正的答案。但將提供我的頭有關問題的頂部的一些想法,你將不得不面對:

  • 令牌發生需要充分隨機和令牌需要「足夠」(爲充分一些定義)長爲了防止某人簡單地發送一堆不同的標記以查看他是否「受到攻擊」

上述問題不應太難實現。但更棘手的事情要弄清楚的是:

  • 你如何可靠地驗證令牌沒有被「綁架」?

如果令牌僅僅是一些隨機字符串,那麼任何人誰碰巧「看到」它在轉院(使用SSL)將能夠承擔起爲其生成令牌使用的身份。

的道理,當你的服務接收將讓你知道:

  • 您的應用程序發出的令牌用戶/應用/實體X
  • 令牌是完好的(沒有被改變)
  • 你與令牌存儲任何其它的事情(是過期等)

但它不會沒有進一步的努力讓你肯定知道,它是由用戶/應用/實體X.它發送可能是誰設法得到的令牌的Y.

當然,很多身份驗證方案都是這種情況,所以根據您的數據的敏感程度以及通過您的服務可以完成的操作類型,它對您而言可能不是什麼大問題。

+0

如何使用現有的令牌生成器,如ASP.NET表單身份驗證? – Snixtor 2012-11-25 23:13:48

2

當你生成一個令牌時,我會將它存儲在一個帶有外鍵的數據庫中,並返回到經過驗證的登錄主鍵。我還會(使用令牌)存儲它建立的日期和時間以及超時期限(您可以爲每個令牌設置此值,或將其存儲在配置中)。每次服務被該用戶佔用時檢查令牌/時間,然後在該時間到期後強制它們重新進行驗證(通過檢查它與存儲在令牌中的創建日期對比)。

這將確保登錄信息只在令牌到期後才傳輸,當生成新的令牌時它將刪除舊的令牌記錄。

我是否理解您的要求?

+0

+1,你明白perfeclty。謝謝! – StackOverflower 2012-08-09 13:58:59