2011-02-05 60 views
7

我正在爲iPhone和Android使用REST API編寫後端應用程序。這是一個內部API。爲iPhone/Android實現註冊REST API的最佳方式是什麼?

在這一點上,我試圖實現用戶註冊API,使用戶可以從移動應用程序註冊。

我正在使用Django和Django編寫它們爲Web請求提供了跨站點請求僞造。我必須使用django-piston禁用REST API。

那麼如何保護我的註冊API免受垃圾郵件?風門?驗證碼?實施註冊API的最佳做法是什麼?什麼是陷阱?

提出的一個建議是在移動應用上加載web視圖,並且有一個移動web註冊表格,以便可以實施CSRF。這是一個解決方案,但不是一個整潔的解決方案,因爲我必須爲每個移動設備創建設計頁面,或者可能不適用於所有設備的通用設備。

許多幫助表示讚賞。

乾杯, 米奇

回答

1

我同意使用OpenID提供者是實現該目標的好方法。你應該看看http://pypi.python.org/pypi/django-social-auth或類似的項目。另外一個好處是您不需要在數據庫中保存密碼憑據。管理的數據較少,數據較少。

如果你確實需要一個經典的基於用戶名/密碼的方案和相應的註冊(也許與像SO本身一樣的基於OpenID的東西),我會採用活塞提供的節流。就個人而言,我只使用驗證碼作爲最後的手段,並且通過REST接口這樣做可能非常煩人。在註冊階段可以繼續之前,您是否要求驗證碼?您如何注意到此用戶已完成驗證碼(會話+ cookie,...)?您不能使用reCAPTCHA或類似的服務,而不使用webview(這將使整個REST方法過時IMO)。

我會重新使用WebView。如果你保持你的界面乾淨簡潔,它不應該在任何智能手機平臺上進行任何約定。

0

沒有理由擔心CSRF您的REST API,在解釋了爲什麼文檔檢查此section

防止垃圾郵件的最佳方法是從驗證的來源收集用戶數據,例如OpenID提供商,Facebook等。如果您想手動執行此操作,那麼最簡單的方法是採取django-registration並擴展其中一個後端。您可以使用提供的簡單後端,並使用帶有驗證碼字段的自定義表單。這應該足以清除自動註冊。應該很簡單,讓它與piston聯繫起來。

編輯:

你說得對,我只是重新閱讀問題,發現我完全不理會你已經提到你正在開發針對遠程Android/iPhone用戶的REST API的事實。因此,您的API將公開公開,並接受非源自您的域或來自瀏覽器客戶端的請求。

我不會在您的案例中重新發明輪子,那麼您應該實施Open API Authentication,因爲它完全適用於您的要求:知道您正在與實際用戶交換信息,而不必擔心請求來自哪裏。

+0

kRON:我認爲CSRF只適用於AJAX的權利?對於REST API,我們必須專門使用csrf_exempt()。至少,這是我在使用django-piston提供的REST API嘗試POST時發現的。 – 2011-02-06 14:14:01

+0

問題是關於註冊一個*新*用戶...所以註冊終結點不能得到保證......這就是爲什麼他擔心可能會被濫用 – 2016-10-10 17:22:03

相關問題