Play Framework 2.X に基づいてプロジェクト用の RESTful API を構築しています。
私の焦点は、私が実装した認証メカニズムにあります。
現在、私はSecureSocialを利用しています。ワークフローは次のとおりです。
- 匿名ユーザーが保護された API を呼び出す
- サーバーは任意の Cookie ID (認証トークンの種類) を取得し、Play 2 キャッシュで一致するかどうかを確認します。(キャッシュには、Cookie ID (ランダムに生成) とユーザー ID の間の関連付けが含まれており、データベースからアクセスできます。
- いずれかが一致した場合、ユーザーは期待されるサービスを処理する権限を与えられます。
- 一致するものがない場合、ユーザーはログイン ページにリダイレクトされ、有効な資格情報 (電子メール/パスワード) が入力されると、サーバーは対応する認証データを Play 2 キャッシュに保存し、カスタム Id (認証トークン) のみを含む新しく作成された Cookie を送信します。もちろん、SSL によって保護されます。
- Cookie/トークンの有効期限が切れていない間、ユーザーはセキュアな API を呼び出すことができます (もちろん、承認されている場合)
全体がうまく機能します。
しかし、いくつかの検索の後、私はこの投稿に出くわしました、そして...私は正しい方法でいるのだろうか.
実際、Cookie (Play の用語では「セッション」) を扱うと、Restfulness のルールが破られます。実際にステートレスと見なされる API は、必要なすべてのデータ (資格情報/トークンなど) を一度に呼び出す必要があるためです。私が実装したソリューションには、両方の呼び出しが必要です。1 つは認証用で、もう 1 つは保護された API を呼び出すためです。
私は物事をうまく作りたいと思っています。
API キーの使用についてはどうですか?
SecureSocial
このワークフローの代わりにそれらを使用してソリューションを実装する必要がありますか? API キーは、安らぎを保つために、すべての API 呼び出しで送信されます。一部の Web アプリケーション、モバイル、およびその他の種類のクライアントから API にアクセスできるようにしたいので、考えてみます。Cookie の管理を強制されるものはありません。OAuthはどうですか?本当に必要ですか?単純な API キーの使用を完全に置き換えるでしょうか? この既知のプロトコルは、常に複数のクライアントを対象とするため、認証と承認を管理する優れた方法です。
一言で言えば、Restful に準拠するために別のメカニズムを実装する必要がありますか?