サーバー上でホストされるアプリケーションを構築しています。あらゆるプラットフォーム (Web アプリ、モバイル アプリ) からの対話を容易にするアプリケーション用の API を構築したいと考えています。REST API を使用する場合、ユーザーをどのように認証するのかがわかりません。
たとえば、ユーザーがログインしてからフォーラム トピックを作成したい場合、ユーザーがすでにログインしていることをどうやって確認すればよいでしょうか?
ベストアンサー1
たとえば、ユーザーがログインしている場合、ユーザーがフォーラム トピックを作成したいとします。ユーザーがすでにログインしていることをどうやって確認するのでしょうか?
考えてみてください。「フォーラムの作成」APIに、この現在のリクエストが認証されたユーザーからのものであることを伝えるハンドシェイクが必要です。REST APIは通常ステートレスなので、状態は永続化される必要があります。どこかREST API を使用するクライアントは、その状態を維持する責任があります。通常、これは、ユーザーがログインした時点から渡されるトークンの形式です。トークンが適切であれば、リクエストも適切です。
Amazon AWS がどのように認証を行っているかを確認してください。これは、1 つの API から別の API に「責任を転嫁する」完璧な例です。
* 前回の回答に実用的な回答を追加しようと思いました。Apache Shiro (または任意の認証/承認ライブラリ) を試してください。要するに、カスタム コーディングは避けてください。お気に入りのライブラリを統合したら (ちなみに私は Apache Shiro を使用しています)、次の操作を実行できます。
- 次のようなログイン/ログアウトAPIを作成します
/api/v1/login
。api/v1/logout
- これらのログインおよびログアウトAPIでは、ユーザーストアで認証を実行します。
- 結果はトークン(通常は
JSESSIONID
)となり、クライアント(Web、モバイルなど)に返されます。 - この時点から、クライアントによる以降のすべての呼び出しにはこのトークンが含まれます。
- 次の呼び出しがAPIに対して行われたとします。
/api/v1/findUser
- この API コードが最初に行うことは、トークンを確認することです (「このユーザーは認証されていますか?」)
- 答えが「いいえ」と返された場合は、HTTP 401 ステータスをクライアントに返します。クライアントに処理させます。
- 答えが「はい」の場合、要求されたユーザーを返すに進みます。