皆さん、これはかなり頻繁に議論されているようですが、RESTfulサービスで認証を行うことについて簡単で骨の折れる質問をしたいと思います。シナリオは次のとおりです。
- アプリケーションの登録ユーザーを収容するシステムがあります。システムは、これらのユーザーにアクセスするためのRESTfulAPIを公開します。
- ログインフォームを備えたフロントエンドアプリケーションがあります。アプリケーションは、内部または外部のいずれかになります。
- フロントエンドアプリケーションは、ユーザーシステムのデータを使用してユーザーを認証する必要があります。
ここで問題となるのは、クレデンシャル(ユーザー名/パスワード)がクライアントアプリケーションに入力されているユーザーを、ユーザーシステムのデータに対して安全でパフォーマンスの高いものとして認証する方法です。この質問のために、クライアントアプリケーションがある種のイントラネットの内部にあるが、アプリケーションは同じマシン上に存在せず、サービスを介してのみ通信できると仮定します。
アプリケーションを「ハイパーメディア駆動型」にするという考えは理解していますが、フィルタリング/検索サービスを提供できるはずです。たとえば、次のようなリソースとAPIについて考えてみます。
- http://example.com/users
- GET-すべてのユーザーを取得します(ページング、ハイパーメディア駆動型)
- POST-新しいユーザーを作成します
- PUT/DELETEはサポートされていません
- http://example.com/users/ [id]
- GET-id={id}のユーザーの完全な表現を返します
- PUT-ユーザーを更新し、事前定義されたメディアタイプを取り込みます
- DELETE-ユーザーを削除します(適切な権限が必要です)
- POSTはサポートされていません
上記に基づいて、私のアイデアは、ユーザーリストでクライアントアプリケーションをGETし、ユーザー名でフィルタリングすることです。サービスはハッシュされたパスワードとソルトをクライアントに返し、クライアントは認証を実行します。
考え?