2015-02-09 55 views
0

有一個項目和數據庫,其中包含表「用戶」及其登錄名和密碼。 主要項目是Web,所以使用Forms身份驗證,它很好。 但是,該項目提供了一些API,以便其他開發人員可以開發自己的軟件(適用於任何平臺:web,windows,iphone,android等),實現與主Web項目相同的功能。 但是,只有當用戶成功通過身份驗證時,API才能被訪問。 所以我在想如何實現這個功能。通過大型項目的API進行身份驗證

選項#1: 該API包含一個方法,用戶可以發送他們的用戶名/密碼並獲取一些脾氣的標記(這意味着我必須將此標記保存在服務器的某個位置,這也是問題:多久? ),然後我可以接受其他API調用,如果用戶的令牌匹配我在服務器上的某個地方。 聽起來很討厭。

選項#2: 所有API方法還必須具有其他字段:用戶名/密碼。 聽起來也很討厭。

請告知什麼是正確的選項?

回答

0

轉到選項#1。我會在你的數據庫中創建一個名爲ApiKey的表。我將擁有用戶標識的外鍵,並且您可以擁有可選的過期字段和/或最大請求限制。創建一個驗證用戶身份的API,然後創建一個唯一的API密鑰,然後將此密鑰發送給用戶。用戶可以使用此API密鑰來訪問其餘的API。

0

如果您打算髮行代幣,請查看支持OAuth。它甚至還有很多很好的軟件包可以爲你處理很多這樣的事情,令令牌管理/認證非常無縫。

另外,this。除非你絕對必須,否則不要編寫自己的認證框架。很多人已經爲你做了這個。

0

正如其他人之前所說的使用選項#1與asp.net OWIN中間件。您不必將令牌存儲在服務器端,OWIN將發出令牌並有責任「解碼」令牌以查找令牌是否有效。您不需要編寫代碼來驗證令牌。

在每個請求上發送用戶名和密碼?永遠永不永遠。

瞭解更多關於擁有和卡塔納:OWIN and Katana

在保護Web API一篇好文章:Secure WEB API

相關問題