web-dev-qa-db-ja.com

セッション/ Cookieベースの認証はステートフルですか、ステートレスですか?

Flask Web開発 は言う

Flask-Loginを使用して実装された現在のログイン機能は、ユーザーセッションにデータを保存します。これは、Flaskデフォルトでクライアント側のCookieに保存されますなので、サーバーはユーザー関連の情報を保存しません;クライアントに代わりに保存するように要求します。この実装はRESTのstateless要件に準拠していますが、RESTful WebサービスでのCookieの使用はグレーエリアに分類されます。そのため、APIでCookieを使用することは、一般に設計上の選択として不適切と見なされています。

https://stackoverflow.com/a/59826012/ は言う:

セッションベースの認証はstatefulです。これは、認証レコードまたはセッションをサーバー側とクライアント側の両方に保持する必要があることを意味します。バックエンドはデータベース内のアクティブなセッションを追跡しますが、フロントエンドでは、セッション識別子を保持するCookieが作成されます。

https://dzone.com/articles/cookies-vs-tokens-the-definitive-guide は言う

Cookieベースの認証はステートフルです。つまり、認証レコードまたはセッションは、サーバー側とクライアント側の両方で保持する必要があります。サーバーはデータベース内のアクティブなセッションを追跡する必要がありますが、フロントエンドでは、セッション識別子を保持するCookieが作成されるため、Cookieベースの認証が行われます。

セッションベースの認証がCookieベースの認証と同じであることは正しいですか?

セッション/ Cookieベースの認証はサーバー側にユーザ​​ー/セッション/ ...を保存しますか?

ステートフルですか、ステートレスですか?

Cookieベースの認証とトークンベースの認証の違いは、前者は署名されていないのに対し、後者は署名されているということですか?

ありがとう。

2
Tim

セッションベースの認証がCookieベースの認証と同じであることは正しいですか?

これらのフレーズは同じではありません。「Cookieベース」はセッション情報の送信方法を反映し、「セッションベース」はすべてのトランザクションで再度ログインする必要がなく、セッションが使用されることを反映しています。 「セッションベース」はCookieを使用して実装される場合があり、通常は実装されますが、これは実際の要件ではありません。たとえば、URLでセッションを送信することもできます。

セッション/ Cookieベースの認証はサーバー側にユーザ​​ー/セッション/ ...を保存しますか?

必ずしも。すべての情報を(署名/暗号化された)Cookie内に保存できるため、クライアントのみが実際に情報を保存し、サーバーはCookieから情報を抽出できます。または、Cookieは、署名/暗号化する必要がないサーバーデータベース内の情報を検索するためのキーにすぎません。

ステートフルですか、ステートレスですか?

特定の文脈におけるこれらの用語の意味/解釈に依存します。第1に、たとえば、認証要求が各要求で送信される場合と比較して、セッションを持っているときは常に状態が関係しています。したがって、この観点から見ると、セッションベースの認証は常にステートフルです。

しかし、一部のコンテキストでは、問題はサーバーとクライアントの両方が状態情報を保持するかどうかです。この解釈では、サーバーがCookieから状態を抽出するだけで、新しいCookieを送信して状態を更新する可能性があるため、すべての状態情報がセッションCookieに含まれている場合、ステートフルではありませんが、実際には状態をローカルに保存しません。

Cookieベースの認証とトークンベースの認証の違いは、前者は署名されていないのに対し、後者は署名されているということですか?

それらは同じではありませんが類似しています。通常、セッションCookieは最初にサーバーによって設定され、次にCookie HTTPヘッダーフィールド内のクライアントによる各リクエストでクライアントによって暗黙的に反映されます。認証トークンは通常、別の方法で作成され(サービスにサインアップするときなど)、クライアントによってリクエストに明示的に追加されます。通常、Authorization HTTPヘッダーフィールド内にあります。セッションCookieと認証トークンはどちらも、内部構造を気にしない(多くの場合、認識しない)ため、クライアントには不透明です。

1
Steffen Ullrich