2011-02-05 5 views
7

Piszę aplikację backendową z interfejsem API REST dla iPhone'a i Androida. To wewnętrzny interfejs API.Jaki jest najlepszy sposób wdrożenia interfejsu API REST rejestracji dla iPhone'a/Androida?

W tym momencie próbuję zaimplementować interfejs API do rejestracji użytkowników, który umożliwia rejestrację użytkownika z poziomu aplikacji mobilnej.

Piszę przy użyciu Django, a w Django przychodzi z prośbą o przekierowanie do strony docelowej. Muszę wyłączyć to dla REST API, używając django-tłok.

Jak mogę chronić mój interfejs API przed spamowaniem? przepustnica? captcha? jaka jest najlepsza praktyka implementacji interfejsu API rejestracji? jaka jest pułapka?

Pojawiła się jedna sugestia, aby załadować przeglądarkę internetową w aplikacji mobilnej i mieć formularz rejestracji mobilnej w sieci, aby umożliwić wdrożenie CSRF. Jest to rozwiązanie, które nie jest zadowalające, ponieważ muszę utworzyć stronę projektu dla każdego urządzenia mobilnego lub standardową, która może nie pasować do wszystkich urządzeń.

Wiele pomocy jest docenianych.

Cheers, Mickey

Odpowiedz

1

Zgadzam się, że używanie dostawcy OpenID jest świetnym sposobem na osiągnięcie tego. Powinieneś zajrzeć do http://pypi.python.org/pypi/django-social-auth lub podobnych projektów. Dodatkową korzyścią jest to, że nie trzeba zapisywać poświadczeń hasła w bazie danych. Mniej danych do zarządzania, mniej danych do stracenia.

Jeśli na pewno potrzebujesz klasycznej nazwy użytkownika/hasła i towarzyszącej rejestracji (może obok rzeczy opartych na OpenID, takich jak SO), pójdę z dławieniem, które zapewnia tłok. Osobiście używam captcha tylko w ostateczności, a robienie tego za pośrednictwem interfejsu REST jest prawdopodobnie dość irytujące. Czy żądasz captcha, zanim będzie można kontynuować fazę rejestracji? Jak zauważyć, że użytkownik ukończył captcha (sesja + ciasteczka, ...)? Nie można używać reCAPTCHA lub podobnych usług bez korzystania z widoku WWW (co spowodowałoby, że cała metoda REST przestałaby być przestarzała).

Chciałbym wrócić za pomocą WebView. Jeśli utrzymasz swój interfejs w czystości i prostocie, nie powinien on zawierać żadnych konwencji na żadnej platformie smartfona.

+0

po prostu ciekawy, z jakiego powodu captcha nie może być używany na poziomie API REST? –

+3

Jest to z pewnością możliwe, ale musisz uzyskać obraz captcha poprzez REST, wyświetlić go użytkownikowi, a następnie odebrać odpowiedź w następnym połączeniu. Znalazłem coś, do czego API nie jest idealny, ponieważ potrzebujesz sesji. Nie podoba mi się utrzymywanie stanu między wywołaniami API. Może to tylko ja. –

+0

Uzgodniono ze statijnymi wywołaniami API (co jest jedną z podstawowych zasad REST!). Jeśli jednak tworzysz własne capcha, nie ma powodu, dla którego nie będziesz w stanie zwrócić "tokena" (np. Solonego hasha MD5 odpowiedzi) obok identyfikatora URI obrazu capcha. Następnie sprawdź swoją aplikację mobilną za pomocą interfejsu API, wysyłając odpowiedzi użytkowników wraz z oryginalnym hashem, który zostały wydane. –

0

Nie ma powodu, aby martwić się o CSRF dla REST API, sprawdź ten section w docs że wyjaśnia dlaczego.

Najlepszym sposobem zapobiegania spamowi jest zbieranie danych użytkownika ze zweryfikowanego źródła, takiego jak dostawca OpenID, Facebook itp. Jeśli chcesz zrobić to ręcznie, najprostszym sposobem jest zrobienie django-registration i rozszerzenie jeden z backendów. Możesz wziąć dostarczony prosty backend i użyć niestandardowego formularza z polem captcha. To powinno wystarczyć do wyeliminowania zautomatyzowanych rejestracji. Powinien być wystarczająco prosty, aby go podłączyć za pomocą piston.

EDIT:

Masz rację, ja po prostu ponownie przeczytać pytanie i zauważył, że całkowicie pominął fakt, że wspomniany już jesteś rozwija swoją REST API przeciwko zdalnych użytkowników Android/iPhone. Twój interfejs API jest publicznie dostępny i akceptuje żądania, które nie pochodzą z Twojej domeny lub klienta przeglądarki.

Nie wynajdywałbym ponownie koła w twoim przypadku, powinieneś wdrożyć Open API Authentication, ponieważ idealnie pasuje do twoich wymagań: wiedząc, że wymieniasz informacje z faktycznym użytkownikiem, nie martwiąc się, skąd pochodzi jego prośba.

+0

kRON: Uważam, że CSRF odnosi się tylko do prawa AJAX? W przypadku REST API musimy użyć csrf_exempt(). Przynajmniej tak się dowiedziałem, kiedy próbowałem użyć POST przy pomocy REST API dostarczonego przez django-tłok. –

+0

Pytanie dotyczy rejestracji * nowego * użytkownika ... Więc punktu końcowego rejestru nie można zabezpieczyć ... dlatego obawia się, że może być nadużyty –