2011-04-01 26 views
4

我正在構建一個既有www前端(www.example.com)又有開發者API(api.example.com)的ASP.NET MVC 3應用程序。我想爲開發人員提供一項簡單的服務,在那裏他們註冊一個密鑰並使用它進行REST調用。我不清楚幾件事情:在ASP.NET MVC 3中創建開發者API平臺?

1)我應該如何生成和存儲密鑰?將它們以純文本格式存儲在數據庫中,還是應該對它們進行哈希和鹽化?

2)如何授權API調用?我猜我不想通過ASP.NET Membership來做到這一點。

一旦我理解了這兩個問題,像限速這樣的事情看起來很簡單。

回答

3

1)這真的取決於你。我已經看到它在我使用過的不同API中完全不同。有些鍵非常類似於GUID,其他鍵顯然只是隨機字符串,但重要的是它們是獨一無二的,不容易猜測。至於如何將其存儲在數據庫中,您爲保護數據付出了多少努力,這實際上取決於用戶賬戶的敏感程度。如果您提供的服務的性質是高度機密的,並且/或者您最終可能會被審覈,那麼您應該採取一切必要措施來保護數據(使用單向散列和醃製)。我的個人理念是儘可能簡單,直到有理由增加複雜性,但我曾經在使用單向哈希與鹽進行驗證的網站上工作。

2)這取決於誰將會使用你的服務。您可以使用內置的ASP.NET Forms Authentication Membership Provider,甚至可以將其與您的公共網站集成在一起,但是這會限制您的API的使用,使用支持HttpProxies上Cookie的平臺的開發人員,並且會讓API變得更難跟隨。我已經使用過的大多數REST-ful服務都使用了基本身份驗證和SSL的組合,這將提供最廣泛的開發人員支持,但在您的實施中執行起來會更加複雜。在服務器端,您必須從HTTP標頭捕獲用戶憑證並根據用戶數據庫對其進行身份驗證。

+0

謝謝喬爾。我當然認爲我想使用標準的基本認證加SSL方法。所以我想這意味着我需要獲得SSL證書? – 2011-04-01 04:19:58

+0

是的,當然,使用基本身份驗證時,用戶名和密碼將以未加密方式發送。你可以使用一個自生成的證書,這個證書是免費的,但是一些框架對於如果產生一個SSL警告時不允許完成請求非常挑剔,所以你應該只對臨時或開發環境這樣做。在您的開發環境中,您可以手動將自行生成的證書添加到您的可信證書,以避免計算機上出現SSL警告。 – 2011-04-01 14:10:16

+0

好的,但是然後開發人員將API調用到客戶端的JavaScript調用,這是行不通的。據我瞭解,你需要生成一個自定義簽名,基本上是你的私鑰和會話的開始時間。是對的嗎? – 2011-04-01 14:48:01