2011-02-05 5 views
7

iPhone 및 Android 용 REST API를 사용하여 백엔드 응용 프로그램을 작성하고 있습니다. 내부 API입니다.iPhone/Android 용 등록 REST API를 구현하는 가장 좋은 방법은 무엇입니까?

이 시점에서 사용자가 모바일 앱에서 등록 할 수 있도록 사용자 등록 API를 구현하려고합니다.

저는 장고를 사용하여 글을 쓰고 장고에는 웹 요청에 대한 크로스 사이트 요청 위조가 있습니다. 장고 피스톤을 사용하여 REST API를 비활성화해야합니다.

그렇다면 스팸으로부터 내 등록 API를 어떻게 보호 할 수 있습니까? 조절판? 보안 문자? 등록 API를 구현하는 가장 좋은 방법은 무엇입니까? 함정이 뭐야?

모바일 앱에 웹뷰를로드하고 CSRF를 구현할 수있는 모바일 웹 등록 양식을 작성하는 것이 좋습니다. 솔루션이지만 모든 모바일 장치에 적합한 디자인 페이지 또는 모든 장치에 적합하지 않을 수있는 일반적인 디자인 페이지를 만들어야하므로 깔끔한 솔루션은 아닙니다.

많은 도움을 주실 수 있습니다.

건배, 미키

답변

1

OpenID 공급자를 사용하는 것이 좋은 방법이라는 점에 동의합니다. http://pypi.python.org/pypi/django-social-auth 또는 이와 유사한 프로젝트를 살펴 봐야합니다. 추가 혜택은 데이터베이스에 암호 자격 증명을 저장할 필요가 없다는 것입니다. 관리 할 데이터가 적고 느슨한 데이터가 적습니다.

당신이 분명히 고전적인 사용자 이름/암호 기반 구성표와 동반 등록 (어쩌면 그 자체와 같은 OpenID 기반 자료와 함께)이 필요하다면, 나는 피스톤이 제공하는 조절과 함께 갈 것입니다. 개인적으로 나는 최후의 수단으로 captcha만을 사용하며 REST 인터페이스를 통해 captcha를 사용하는 것은 아마도 매우 성가시다. 등록 단계를 계속하기 전에 보안 문자를 요청합니까? 이 사용자가 보안 문자 (세션 + 쿠키, ...)를 어떻게 작성했는지 어떻게 알 수 있습니까? webview를 사용하지 않고도 reCAPTCHA 또는 유사한 서비스를 사용할 수 없습니다 (전체 REST 접근 방식이 쓸모없는 IMO가됩니다).

WebView를 사용하여 다시 방문하겠습니다. 인터페이스를 깨끗하고 단순하게 유지한다면 모든 스마트 폰 플랫폼의 규칙에 어긋나지 않아야합니다.

+0

그냥 호기심, 왜 captcha 사용할 수없는 이유입니다 REST API 수준에서? –

+3

확실히 가능하지만 REST를 통해 captcha 이미지를 가져와 사용자에게 표시 한 후 다음 호출에서 대답을 다시 얻어야합니다. API가 이상적이지 않은 것을 발견했습니다. 세션이 필요합니다. API 호출간에 상태를 유지해야하는 것을 좋아하지 않습니다. 어쩌면 그것의 다만 저. –

+0

Stateless API 호출 (REST의 기본 원칙 중 하나임!)에 동의합니다. 그러나 자신 만의 캡차를 굴리면 캡차 이미지 URI와 함께 "토큰"(예 : 답변의 MD5 소금기가있는 해시)을 반환하지 못할 이유가 없습니다. 그런 다음 모바일 앱이 발행 된 원래 해시와 함께 사용자 응답을 보내 API로 확인하도록합니다. –

0

이유를 설명하는 문서에이 section을 확인하여 REST API에 대한 CSRF에 대해 걱정할 필요가 없습니다.

스팸을 방지하는 가장 좋은 방법은 OpenID 제공 업체, Facebook 등의 인증 된 출처에서 사용자 데이터를 수집하는 것입니다. 수동으로 수행하려는 경우 가장 간단한 방법은 django-registration을 백엔드 중 하나. 제공된 간단한 백엔드를 가져 와서 captcha 필드가있는 사용자 정의 양식을 사용할 수 있습니다. 이것은 자동 등록을 제거하기에 충분해야합니다. piston으로 연결될만큼 간단해야합니다.

편집 :

네 말이 맞아, 난 그냥 질문을 다시 읽고 나는 완전히 당신이 이미 원격 안드로이드/아이폰 사용자에 대한 귀하의 REST API를 개발하고 언급 한 사실을 무시났습니다. 따라서 귀하의 API는 공개되어 귀하의 도메인이나 브라우저 클라이언트에서 발생하지 않은 요청을 받아들입니다.

귀하의 요구 사항에 완벽하게 적용되므로 Open API Authentication을 구현해야합니다. 즉, 요청이 어디에서 발생했는지 걱정하지 않고 실제 사용자와 정보를 교환하고 있다는 것을 알고 있기 때문입니다.

+0

kRON : CSRF는 AJAX 권한에만 적용되는 것으로 생각하십니까? REST API의 경우 특별히 csrf_exempt()를 사용해야합니다. 적어도, 그게 장고 - 피스톤에 의해 제공되는 REST API를 사용하여 POST하려고했을 때 알아 낸 것입니다. –

+0

질문은 * 새로운 * 사용자를 등록하는 것입니다 ... 그래서 등록 끝점을 확보 할 수 없습니다 ... 그 이유는 그가 학대 수 있습니다 걱정이다 –

관련 문제