web-dev-qa-db-ja.com

Cookieベースの認証はどのように機能しますか?

誰かがクッキーベースの認証がどのように機能するかを段階的に説明してくれますか?認証またはCookieに関係することは何もしていません。ブラウザは何をする必要がありますか?サーバーは何をする必要がありますか?何の順番で?どうすれば物事を安全に保つことができますか?

私はさまざまな種類の認証とCookieについて読んでいますが、2つを一緒に使用する方法の基本的な説明が欲しいです。

162
Mastid

Cookieは基本的には辞書内の単なるアイテムです。各アイテムにはキーと値があります。認証の場合、キーは「ユーザー名」のようなもので、値はユーザー名になります。 Webサイトにリクエストを行うたびに、ブラウザはリクエストにCookieを含め、ホストサーバーはCookieをチェックします。そのため、認証はそのように自動的に行われます。

Cookieを設定するには、リクエスト後にサーバーが送信する応答に追加するだけです。ブラウザは、応答を受信するとCookieを追加します。

有効期限や暗号化など、Cookieサーバー側に設定できるさまざまなオプションがあります。暗号化されたCookieは、多くの場合、署名付きCookieと呼ばれます。基本的に、サーバーはディクショナリ項目のキーと値を暗号化するため、サーバーのみが情報を利用できます。したがって、Cookieは安全です。

ブラウザは、サーバーによって設定されたCookieを保存します。ブラウザがそのサーバーに対して行うすべてのリクエストのHTTPヘッダーに、Cookieが追加されます。 Cookieを設定するドメインのCookieのみを追加します。 Example.comはcookieを設定し、ブラウザのHTTPヘッダーにオプションを追加して、sub.example.comなどのcookieをサブドメインに送り返すことができます。ブラウザが別のドメインにCookieを送信することは受け入れられません。

134
Conor Patrick

私はこれが何年も遅れていることを知っていますが、コナーの答えを拡張し、議論にもう少し追加できると思いました。

誰かがクッキーベースの認証がどのように機能するかを段階的に説明してくれますか?認証またはCookieに関係することは何もしていません。ブラウザは何をする必要がありますか?サーバーは何をする必要がありますか?何の順番で?どうすれば物事を安全に保つことができますか?

ステップ1:クライアント>サインアップ

何よりも先に、ユーザーはサインアップする必要があります。クライアントは、ユーザー名とパスワードを含むHTTP要求をサーバーに送信します。

ステップ2:サーバー>サインアップの処理

サーバーはこのリクエストを受信し、パスワードをハッシュしてからユーザー名とパスワードをデータベースに保存します。このようにして、誰かがデータベースにアクセスしても、ユーザーの実際のパスワードは表示されません。

ステップ3:クライアント>ユーザーログイン

これでユーザーがログインします。ユーザーはユーザー名/パスワードを入力します。これは再びHTTP要求としてサーバーに送信されます。

ステップ4:サーバー>ログインの検証

サーバーはデータベースでユーザー名を検索し、指定されたログインパスワードをハッシュし、データベースで以前にハッシュされたパスワードと比較します。チェックアウトしない場合、 401ステータスコードを送信してリクエストを終了する でアクセスを拒否できます。

ステップ5:サーバー>アクセストークンの生成

すべてがチェックアウトされると、ユーザーのセッションを一意に識別するアクセストークンを作成します。サーバーでは、アクセストークンを使用して2つのことを行います。

  1. そのユーザーに関連付けられたデータベースに保存します
  2. クライアントに返されるレスポンスCookieに添付します。有効期限を設定して、ユーザーのセッションを制限してください

以降、Cookieは、クライアントとサーバー間で行われるすべての要求(および応答)に添付されます。

ステップ6:クライアント>ページリクエストを行う

クライアント側に戻ると、ログインしています。クライアントが認証を必要とするページ(ログインする必要があるページ)をリクエストするたびに、サーバーはCookieからアクセストークンを取得し、それをチェックします。そのユーザーに関連付けられたデータベース内。チェックアウトすると、アクセスが許可されます。

これで開始できます。ログアウト時に必ずCookieをクリアしてください!

224
pllx

Cookieベースの認証

Cookieベースの認証は、これらの4つのステップで正常に機能します。

  1. ユーザーはログインフォームでユーザー名とパスワードを入力し、[ログイン]をクリックします。
  2. 要求が行われた後、サーバーはデータベースでクエリを実行して、バックエンドのユーザーを検証します。リクエストが有効な場合、データベースから取得したユーザー情報を使用してセッションを作成し、保存します。セッションごとに、セッションIDと呼ばれる一意のIDが作成されます。デフォルトでは、ブラウザを介してクライアントにセッションIDが付与されます。
  3. ブラウザは後続の各リクエストでこのセッションIDを送信し、このセッションIDに基づいてデータベースに対してセッションIDが検証されます。ウェブサイトはどのクライアントに属するセッションを識別し、リクエストにアクセスを許可します。

  4. ユーザーがアプリからログアウトすると、セッションはクライアント側とサーバー側の両方で破棄されます。

13
Debendra Dash