4

現在、2.0 を使用して OAuth 認証 3 足の戦略を実装しています。私は問題に遭遇しました:

Oauth を使用してログインするときに、クライアントのセッションを記憶する最善の方法は何ですか。

現在私がやっていることは、サーバー上のセッション ID と一致するクライアントに Cookie を設定することです。もちろん、これは通常の Cookie セッション ベースのログインと同じです。次に、セッションで、Auth Code を使用してアクセス トークンと交換したときに取得したアクセス トークンを追跡します。

ご覧のとおり、状態は Cookie/セッション ID を介してクライアントとサーバーの間で同期され、アクセス トークンはサーバー内でセッション ID との関係でのみ保持されます。

ただし、これは安全ではなく、OAuth はステートレス (安静) スタイルであるべきであることを読んだので、特にクライアントがマシン クライアントでありブラウザー クライアントではない場合は、Cookie は必要ありません。一部のリソースでは、クライアントはアプリへのリクエストを認証するために必要な資格情報をすべて保存する必要があると述べています。これは、ブラウザのヘッダーにアクセス トークンを格納する必要があるということですか? リダイレクトからの認証コードはどうですか?これはブラウザのヘッダーにも保存する必要がありますか? (そして、これらのコード/トークンは、ブラウザのヘッダーで暗号化/署名する必要があります) (そして、PHP を使用してこれを行うにはどうすればよいでしょうか?)

次のようなリソース: http://sitr.us/2011/08/26/cookies-are-bad-for-you.htmlは、クライアント側のリッチな JavaScript アプリがアクセス トークンを追跡し、すべての XHR に渡すことができると述べています。リクエスト?もちろん、すべてのクライアントがマシン クライアントなどの JavaScript アプリであるとは限りません。

4

1 に答える 1

0

トークンを通常のセッションに保存しないでください。ステートレスであるという考え方は、各リクエストが必要なすべての検証情報を運ぶということです。

もちろん、すべてのリクエストが必要なすべてのデータを運ぶようにするために、クライアント側でより多くの作業が必要になる場合があります。

REST がステートレスであることの利点の 1 つは、分散実装がより簡単になることです。すべてのリクエストには必要なデータがすべて含まれているため、同じサーバーに 2 回アクセスする必要さえありません。各サーバーは独自に検証できます。

于 2014-02-14T01:39:08.943 に答える