2012-06-10 41 views
3

我現在構建在服務器端使用asp.net的WebAPI一個應用程序,我得到了有關驗證問題:一些關於asp.net的WebAPI問題

我想提供我的WebAPI的多平臺,就像瀏覽器的javascript或windows手機等等,所以我決定用HTTP-BASIC暗示驗證,「(原諒我可憐的英語),問題是,在過去的時間。

我總是拿SESSION中的一些用戶信息,但我們知道使用REST風格的webAPI是會話無狀態的,因此如何存儲用戶的信息:

我想到了一些想法,我希望你能讓我做出正確的選擇,thx很多

1. 把信息放入瀏覽器的cookie,除了用戶的密碼和其他重要的信息。每次我發出http請求時,我都會把cookies和在服務器端,我可以查詢用戶的信息並進行其他步驟(該序列不適用於moblie平臺,僅在瀏覽器中使用cuz cookie)

2.user HTTP-BASIC驗證,每次服務器獲取httpRequest時,都會在HTTP-Headers中獲取用戶名和密碼,服務器端也可以查詢用戶信息。

回答

2

大多數REST API的我見過處理身份驗證的方式有兩種:

  1. HTTP頭,無論是基本身份驗證,或一些自定義頭傳遞的憑據。這將是您的選項2.如果您通過HTTPS運行,這只是非常好,因爲證書將在標頭中以明文形式顯示。
  2. 使用一對令牌,一個作爲標識符(有點像用戶名)和一個客戶端和服務器之間的共享密鑰(有點像密碼)。然後對標識符,請求參數的一部分和祕密進行散列。這個散列和標識符隨後與請求一起發送。知道祕密的服務器然後使用相同的方法計算哈希,並確保它們匹配(Amazon Web Services使用此方法以及使用OAuth的任何內容)。

與基本認證不同的是,更多Web API似乎正在遷移到第二種方法,因爲它抵禦篡改和重放攻擊。當然,這更爲複雜。

RFC 5849 Section 3.4對於OAuth而言,幹讀時會經歷用於創建散列的過程,如果您願意,可能會是一個很好的實施起點。 C#中的基本實現是provided on the OAuth Google Code site,並且可能是更好的選擇。

+0

非常感謝 –