web-dev-qa-db-ja.com

REST)のOAuthのトーク​​ンとセッション

先日、OAuthに関する記事を読みました。特に、一連のリクエスト中にクライアントとサービスプロバイダーの間で交換されるトークンについて説明しました。

この記事では、OAuthが承認レイヤーとしてRESTfulAPIで非常に人気があると述べています。私が理解したように、RESTは完全にステートレスに保つ必要があります。

質問:この繰り返されるトークン交換魚雷RESTの「ステートレス」の原則ではありませんか?私見では、トークンは一種のセッションIDと見なすことができますね。

41
Boldewyn

OAuthトークンは明示的にセッション識別子であり、リクエストは特定の順序で実行する必要があるため、OAuthトークンネゴシエーションプロトコルのリクエスト間でステートレスではありません。また、クライアントごとのストレージが必要です。いつ発行されたかなどを追跡する必要があるため、サーバー。そうです、OAuthは、RESTfulアーキテクチャの厳密な原則に違反します。

残念ながら、現実の世界がありますTM パスワードを要求せずにアプリケーションが個人に代わって認証できるようにするなど、必要な場合に対処するため。OAuthはかなりうまくいきます。同様に安全な認証スキームを実装することは不可能です。この種の状態がない場合。実際、OAuth(1.0a)で必要な変更の1つは、セキュリティリスクを軽減するためにトークンネゴシエーションプロトコルにmore状態を追加することでした。 。

それで、それはRESTのステートレス原理を魚雷で撃ちますか?はい。それは重要ですか?あなたが象牙の塔に住んでいない限りではありません:-)

76
Greg Beech

認証は、Webインタラクションを処理するときに何らかの方法で追跡する必要がある状態です。最終的に、アプリが落ち着いているかどうかにかかわらず、サーバーは各ユーザーの「認証済み状態」を追跡できる必要がありますが、残念ながら、HTTPの基本的なステートレスの性質と、それに加えて追加のトランスポート/手法(RESTなど)を何らかの方法で回避する必要があります。それ。

したがって、あらゆる種類の認証済みアプリを開発するには、状態の原則をどこかで強化する必要があります。その場合、RESTに加えてOAuthである必要があります!

6
drew.macleod