2013-07-08 84 views
2

我正在使用公共REST API。註冊的客戶將獲得一個API密鑰以使用API​​,從他們的服務器(不是來自瀏覽器)。單個客戶端也可以擁有多個密鑰,可能用於其服務器上的獨特應用程序。所以我很好奇人們會在哪裏驗證API密鑰...WebApi和Api密鑰驗證位置

  1. 使用委託處理程序(通常用於身份驗證)並執行密鑰查找。

  2. 使用授權過濾器來查看密鑰是否授權。

對於未經授權的情況,我想返回400-不良請求或403-禁止(在密鑰被暫停的情況下)。

我的第一個想法是關鍵是授權獲取訪問權限,而不是使用該服務標識應用程序。但是,通過在委託處理程序中查找關鍵字,可以更快速地(在HTTP消息處理程序中)而不是在授權過濾器觸發的Controller中短路。

回答

2

API密鑰是您驗證的憑證,基本上是驗證。我相信消息處理器是驗證和設置委託人的好地方。如果稍後在管道中建立的身份允許進行該呼叫,那麼在管道中稍後運行的授權過濾器可以授權。我在Thinktecture identity model的消息處理程序中實現了使用共享密鑰的hawk authentication。有關在ASP.NET Web API中使用ttidm和hawk的更多信息,請參閱here

有幾件事要注意w.r.t消息處理程序。消息處理程序儘早在Web API管道中運行,但稍後在ASP.NET管道中運行(假設爲虛擬主機)。您在Web API處理程序中建立的身份僅適用於Web API,IIS/ASP.NET對此一無所知。如果你知道你只會網絡主機,HttpModule將是一個更好的地方。

在Web API 2中,有一個AuthenticationFilter。我不知道更多細節,但聽說Dominick Baier在NDC 2013中提到了這一點。另一位候選人是OWIN中間件,如果您打算使用OWIN。