2

バックエンドとフロントエンドを備えた Web アプリケーションを構築しています。バックエンドは scala で構築され、フロントエンドは html、css、jquery (backbone.js、jquery.js、underscore.js) で構築されています。

ログインを作成するにはどうすればよいですか? したがって、基本的にはフロントエンドをアプリとして見ることができます。残りのバックエンドに対しては json リクエストのみを行います。

手伝ってくれてありがとう。

4

1 に答える 1

8

Scala であろうとなかろうと、JSON であろうとなかろうと、XHR であろうとなかろうと、メカニズムは同じです。ログインとパスワードをサーバーに送信し(クライアント側でパスワードをソルトハッシュして安全にします)、サーバーはそれを認証し(ログインとパスワードがdbのものと一致するかどうかを確認します)、ユーザーのセッションを作成します( DB またはメモリ内 - 必要に応じて) を作成し、セッション ID を Cookie としてユーザーに送信します (AJAX 要求/応答は Cookie で正しく機能する必要があります)。

これで、リクエストごとにセッション Cookie をチェックし、それが有効なユーザーを指しているかどうか (つまり、何かを指しているかどうか) を検証します。ログアウトは、指定された ID を持つセッション エントリを削除するのと同じくらい簡単です。ID は、まず (セッション ハイジャックの脅威を最小限に抑えるために) 長く、次に (期限切れのセッションを消去できるように) エンコードされた日付を含むように作成する必要があります。

これはいわゆるフォームベース認証です。

// 編集

コメントで質問に答えさせてください。セッションはどのように機能しますか?

サーバーがセッションを作成します。セッションは、ID と値の 2 つの列を持つ DB のテーブルに他なりません (ここでは、JSON でエンコードされたセッション データを保持し、eShop から購入したいものなど、必要に応じて圧縮します)。クライアントが正常に認証されると、サーバーはセッション ID を Cookie 経由でユーザーに送信します。したがって、サーバーは次のヘッダーを応答に追加する必要があります。

Set-Cookie: session=ID32445235423tdwfnmm; Expires=Wed, 09 Jun 2012 10:18:14 GMT

これで、ブラウザーはこのヘッダーを理解し、クライアントの Cookie を設定します。この時点から、リクエストを行うたびに、ブラウザーはリクエストに Cookie を自動的に追加するため、以降のすべてのリクエストには次のヘッダーが含まれます。

Cookie: session=ID32445235423tdwfnmm; other_cookie:other_value;

日付が より後でない限りWed, 09 Jun 2012 10:18:14 GMT。この場合、セッション Cookie は省略されます (これは、手動で処理する必要があるサーバー側でセッションを破棄することと同じではないことに注意してください)。

Cookieここで、サーバー側でヘッダーをデコードして ID を取得する必要があります。この時点で何らかのフレームワークを使用することは素晴らしいアイデアです。すべてのリクエストでデコード コードを記述するのは悪い習慣だからです。ここでは、いわゆるミドルウェアを使用する必要があります。このミドルウェアは ID を取得し、DB でセッションをチェックし、結果 (つまり、ユーザーが認証されているかどうか) を後で使用する要求オブジェクト (つまり、最終的な要求ハンドラー) に格納します。

ご覧のとおり、JavaScript をまったく使用していません。

また、ログイン リクエストでのみCookie を設定します (ただし、セッション ハイジャックの問題を最小限に抑えるためにすべてのリクエストで設定できますが、それはさらに複雑です)。ID を保存するのはブラウザの仕事です。サーバー側では、Cookieヘッダーにsessionキーが含まれているかどうかのみを確認します。

于 2012-04-26T10:38:34.363 に答える