2012-06-09 65 views
2

我已經做了大量的研究,並且我無法解決這是否是實現我所需要的最佳方法。通過REST API管理用戶身份驗證的正確方法?

我有一個通用的網絡應用程序,我想創建一個通用的移動應用程序去與它。爲了讓用戶保存數據/訪問用戶特定的數據/等他們必須登錄,登錄必須通過我的Web應用程序的REST API進行身份驗證。

因此,api擁有移動應用的私鑰和公鑰。公鑰告訴我請求來自哪裏(移動應用程序),私鑰用作「鹽」來散列查詢字符串,然後可以在請求進入時對Web服務器重新進行查詢並對其進行比較以進行比較。

要登錄用戶,請輸入用戶名和密碼,然後按照上述方法將其作爲查詢字符串變量發送。在另一端檢查查詢的有效性,並根據數據庫檢查用戶名+密碼對。如果登錄正確,則會爲該用戶和公鑰生成一個隨機「身份驗證令牌」,並將其發送回移動應用程序進行本地存儲。

當來自移動應用程序的下一個請求來自查詢字符串變量時,其中一個查詢字符串變量是來自早期的「auth令牌」,它將針對數據庫中的「auth令牌」表檢查有效性(使用應用程序的公鑰) 。如果它有效,請執行請求。

這裏我的問題是,我有這個權利嗎?這是實現我所需要的最好方法嗎?最後一步似乎真的不安全,因爲如果請求被攔截,公鑰和身份驗證令牌都將可見。很明顯,請求將根據查詢字符串和另一端的私鑰的散列進行檢查,這將確保請求不是來自任何惡意的地方。

有沒有其他的步驟,或者我錯過了哪些有用的東西?例如,我讀到應該有一個時間戳變量,它應該在請求中的5/10分鐘的時間範圍內進行檢查。任何5/10分鐘以上的時間戳,請求應被拒絕。這很重要嗎?

謝謝。

回答

2

你所描述的基本上是一個自制軟件版本2-legged OAuth。有很多你可以基本使用的實現。無論何時涉及安全相關的東西,我都會這樣做:如果其他人已經做到了,不要重新發明輪子。 OAuath被許多大型網站(Twitter,Facebook,GitHub,Google,...)所使用,他們對OAuth標準進行了大量研究。所以我會建議使用這些。

如果您擔心您發送的郵件可能被攔截,您應該使用HTTPS ......如果您通過電話傳遞用戶名和密碼組合,通常這是個好主意。

+0

很酷,謝謝你的回答。 :)我會使用標準。我也會考慮使用https。 :)但是,更多的人正在自己打電話,我很擔心。 –