2012-05-30 128 views
1

我想爲用戶構建一個API來構建可以輕鬆與站點交互的應用程序,並且我想知道認證用戶的最佳方式是什麼。如何使用網站API對用戶進行身份驗證?

考慮看看其他API是一個很多人都在用戶發送的用戶名和密碼通過HTTPS連接的GET參數。這是最好的辦法嗎?還是有其他方法,我應該看看或考慮?

我見過的OAuth被到處濫用,它看起來像一個很好的解決方案,但只是一個簡單的API是矯枉過正?

+0

目前的答案(非)令人滿意嗎?自從你問這個問題已經有好幾個月沒有你的任何反饋。 –

回答

0

您可以使用API​​密鑰。根據請求生成與帳戶綁定的唯一哈希。然後檢查密鑰是否是有效密鑰。只要該API沒有與使用其他人的密鑰的人有任何重大安全問題,則不需要授權。如果某人使用其他人的密鑰存在問題,那麼身份驗證將是合理的。

0

這通常與cookies實現。

客戶端發送自己的用戶名和密碼與POST請求您的API(做使用GET,這是不安全的)。如果證書可以接受,那麼生成一個隨機的,唯一的會話密鑰,將其存儲在您的身邊並將其發送回客戶端(參見setcookie())。

當客戶端現在做進一步的要求,他們發送的會話密鑰的cookie的請求。如果會話密鑰與您身邊存儲的密鑰匹配,請檢查$_COOKIE;如果是,那意味着用戶認證。

注意到,這個小例子,很容易受到蠻力攻擊嘗試猜測有效的會話密鑰。您需要記錄客戶端通過cookie發送的無效密鑰並阻止其IP地址一段時間以防止出現這種情況。

0

用戶名/在GET密碼不這樣做,因爲你可能暴露整個用戶帳戶劫持即使API具有比登錄到網站更有限的功能的好方法。因此,分離網站登錄和API訪問之間的關注是一種很好的做法。

我不知道你是這種情況,但是:

  • 如果用戶是誰,都嵌入某種類型的小部件或代碼在另一個網站的somekind的企業客戶那麼它可能最好使用一個API關鍵字,其範圍與referrer域(很像Google Maps一樣)。

  • 如果他們是最終用戶誰不會知道API的任何內容,但將使用由第三方建立的應用程序,然後oAuth可能是你最好的選擇,否則你的用戶可能會字面上給他們的用戶名/密碼給未知的第三方。從長遠來看,這更爲複雜,但可能值得。

爲了得到一堆的這個東西出來,你可以使用類似的3比例盒(http://www.3scale.net)的,它會處理大部分爲您(免責聲明,我的工作那麼可以調整偏差!)或者在大多數語言中都有oAuth的開放源代碼庫(在PHP中,Zend-OAuth組件可能會爲您完成這項工作)。

相關問題