2012-12-04 4 views
1

iOS 및 Android와 같은 모바일 장치와 함께 사용하도록 설계된 PHP에서 REST 웹 서비스를 구축 중입니다. 기본적으로 GET 요청은 요청에 대한 결과와 함께 JSON 데이터를 반환하는 데 사용되며 POST 및 DELETE 요청은 서비스에 데이터를 추가하는 데 사용됩니다. 가 로그인 할 필요가, 사용자가 뭔가 자신의 목록처럼, 그들에게 특정 데이터를 요청할 때 있도록모바일 웹 서비스 인증

는 기본적으로, 사용자 로그인/인증 시스템을 구현해야하거나 데이터를 시도하고 추가 할 수 있습니다.

SSL을 사용하여 가입 및 인증을 안전하게해야한다는 것을 알고 있지만, 다시 발명하지 않으려합니다. 이 일을위한 해결책을 찾고 있습니까? 어떤 제안이라도 대단히 감사하겠습니다! 감사합니다.

답변

5

진정한 REST 웹 서비스를 구축하는 경우 세션을 가질 수 없습니다. 즉, 사용자가 한 번 로그인하면 서버는 세션을 기억하고 이후의 각 호출에 대해 해당 세션을 사용합니다. REST 서비스의 경우 서버는 "상태"를 기억하지 않습니다. 작업의 균일 한 세트에 한정 전환을 이해할 수와

각 상태는 완전히 표현은 그것 포함하고 제공 천이의 세트로 이해 될 수있다.

(출처 : http://tech.groups.yahoo.com/group/rest-discuss/message/5841) 서버를 호출 할 때마다 사용자를 인증하는 고유 식별자와 함께해야하기 때문에

이 실제로 작업 쉬워집니다. 귀하의 옵션에는 사용자 이름/암호 조합, 비밀 키 및 사용자를 식별하는 다른 참조 또는 아마도 둘 다를 전송하는 것이 포함됩니다. 따라서 사용자가 로그인하면 세부 정보 클라이언트 측 (즉, 웹 양식의 자바 스크립트 또는 응용 프로그램과 iPhone/Android의 로컬 저장소에 저장 됨)을 기억하고 각 통화마다 세부 정보를 보냅니다. 나머지 호출을 사용하여 로그인 세부 정보의 유효성을 검증 할 수는 있지만 세션을 반환하지는 않습니다.

그래서 pseduo 코드로 대답 :

  1. HTML :에서 사용자 로그. 양식 자바 스크립트와 사용자 이름/암호 (또는 다른 비밀 키)에 의해 갇혀 자바 스크립트에 의해 기억되고, OR
  2. 아이폰 OS/안드로이드 :. 양식에서 사용자 로그는 로컬 저장소에서 코드에 의해 갇혀 기억되어
  3. [선택] 보내기 "WhoAmI"webservice에 대한 사용자 이름/패스/비밀 키 : 유효한 경우 응답을받습니다. 유효하지 않으면 오류가 발생합니다. 즉각적인 피드백을 줄 수 있습니다.
  4. 다른 모든 호출과 함께 사용자 이름/패스/비밀 키를 웹 서비스에 전송합니다. 유효하지 않은 경우 호출을 처리하면 오류가 발생합니다.
  5. (오류가 발생하면 사용자에게 새 자격 증명을 요청합니다.)

PHP의 측면은 간단하다 : 각각의 모든 호출은 읽습니다 :

  1. 에는 사용자 이름/암호/비밀 키는 경우 데이터베이스에 사용자 이름/암호/비밀 키를 검색 전화
  2. 을 거부하지 않습니다. 유효하지 않은 경우 : 전화 거절
  3. 유효한 경우 : 나머지 통화 처리 - 사용자의 세부 정보가 있습니다.

분명히 인증을 필요로하지 않는 서비스를 사용할 수도 있습니다. 여기에는 등록이 포함될 수 있습니다.

+0

감사합니다. 이 작업의 대부분을 얻었습니다 :) 지금 테스트하고 dev에 대해 저는 스트레이트 HTTP를 통해이를 사용하고 있고 배포 할 때 HTTPS (SSL)로 마이그레이션 할 것입니다. 사용자가 내용을 추가 할 수있는 경우 유효성을 검사하기 위해 POST 메시지와 함께 자격 증명을 전송할 것이므로 관심사 중 하나는 해당 메시지를 SSL로 보호해야합니다. 이 POST 양식 중 일부에는 이미지와 파일이 있습니다. 이 작업에 익숙하지 않은데, 실제 데이터가 많지 않으므로 SSL을 통한 텍스트/데이터 인코딩을 이해합니다. 하지만 SSL을 통해 전체 이미지 또는 파일을 인코딩하는 것이 일반적인 관행입니까? – dbrateris

+0

HTML을 ssl에서 제공 한 경우 ssl에서 제공 한 이미지도 필요합니다. 무선 네트워크로 인해 eves가 떨어지는 것을 방지하기 위해 페이지가 점점 더 보편화되고 있습니다. 대역폭/서버 CPU에 대해 심각하게 걱정하지 않는 한 걱정할 필요가 없습니다. – Robbie

+0

감사. 나는 그때 그것에 대해 걱정할 필요가 없어 보인다. - 분명히 말하면, 내가 제공하는 웹 페이지가 아니며, iPhone과 같은 모바일 장치에서 이미지 업로드시 양식 데이터입니다. 감사합니다. – dbrateris

0

클라이언트 응용 프로그램에 대한 Oauth 소비자 키와 암호가 번들로 제공됩니다. HTTPS 요청에 대해 Oauth 1 인증 헤더로 서명하십시오. 요즘에는 oauth 라이브러리를 사용하여 쉽게 서명 할 수 있습니다.

웹 앱의 경우, 방법이 없습니다.