1

iOSやAndroidなどのモバイルデバイスで使用するように設計されたPHPでREST Webサービスを構築しています。基本的に、GET リクエストはリクエストの結果を含む JSON データを返すために使用され、POST および DELETE リクエストはサービスにデータを追加するために使用されます。

基本的に、ユーザー ログイン/認証システムを実装して、ユーザーが独自のリストなどの特定のデータを要求したり、データを追加しようとしたりしたときに、ログインする必要があるようにする必要があります。

SSL を使用してサインアップと認証を保護する必要があることはわかっていますが、再発明は避けたいと考えています。これを行うための解決策を探していますか? どんな提案でも大歓迎です!ありがとう!

4

2 に答える 2

5

本物の REST Web サービスを構築している場合、セッションを持つことはできません。つまり、ユーザーが一度ログインすると、サーバーはセッションを記憶し、ユーザーはその後の呼び出しごとにそのセッションを使用します。REST サービスの場合、サーバーは「状態」を記憶しません。

各状態は、含まれる表現とそれが提供する遷移のセットによって完全に理解できます。遷移は、理解しやすいように一連のアクションに限定されます。

(出典: http://tech.groups.yahoo.com/group/rest-discuss/message/5841 )

サーバーへの各呼び出しには、ユーザーを認証するための一意の識別子が必要なため、これにより実際に作業が簡単になります。オプションには、ユーザー名とパスワードの組み合わせ、秘密鍵、およびユーザーを識別するためのその他の参照、あるいはその両方を送信することが含まれます。したがって、ユーザーが「ログイン」すると、クライアント側で詳細を記憶し (つまり、Web フォームの JavaScript で、またはアプリケーションによって、iPhone / Android のローカル ストレージに記憶されます)、呼び出しごとにそれらの詳細を送信します。残りの呼び出しを使用してログインの詳細を検証できますが、セッションは返されません。

したがって、疑似コードで答えるには:

  1. HTML: ユーザーのログイン。フォームが Javascript によってトラップされ、ユーザー名/パスワード (またはその他の秘密鍵) が JavaScript によって記憶されている、または
  2. iOS / Android: ユーザーがログインします。フォームはコードによってトラップされ、ローカル ストレージに記憶されます。
  3. [オプション] ユーザー名/パス/秘密鍵を「WhoAmI」Web サービスに送信します。有効な場合は、応答が返されます。有効でない場合は、エラーを送信します。これにより、すぐにフィードバックを得ることができます
  4. 他のすべての呼び出しで、ユーザー名/パス/秘密鍵も Web サービスに送信します。有効な場合は呼び出しを処理し、有効でない場合はエラーをスローします。
  5. (エラーが発生すると、ユーザーに新しい資格情報を要求します)。

PHP 側はシンプルです。すべての呼び出しは次のように表示されます。

  1. ユーザー名/パスワード/秘密鍵がない場合: 通話を拒否
  2. データベースでユーザー名/パスワード/秘密鍵を検索します。有効でない場合: 通話を拒否
  3. 有効な場合: 残りの通話を処理します - ユーザーの詳細が表示されます。

もちろん、認証を必要としないサービスを追加することもできます。これには登録が含まれる場合があります。

于 2012-12-04T03:30:29.840 に答える
0

Oauthコンシューマキーとシークレットをクライアントアプリにバンドルします。HTTPSリクエストのOauth1認証ヘッダーで署名します。現在、oauthライブラリを使用すると署名が簡単です。

Webアプリの場合、方法はありません。

于 2012-12-04T04:38:11.757 に答える