登録済みまたは未登録のユーザー向けに、バックボーンと RequireJS を使用して js アプリを作成します。データベースからデータを取得するために、単純な JSON Web サービスを使用していますが、もちろん、いくつかの方法はクエストでは利用できません。問題は、サーバーから取得した認証データをすべてのビューでリロードせずに、どこにどのように保存する必要があるのか わからないことです。クッキーを使用する必要がありますか?
1 に答える
認証、承認方法、およびユーザーに対して考慮する必要があるセキュリティの種類に依存すると思います。RESTful になろうとしている場合、状態を保存するためのセッションを持つことはできません (少なくともサーバー側では)。可能ですが、それが重要な場合は、サーバーに状態が保存されるため、RESTful ではありません。状態をクライアント側で保存しても問題ないと聞いたことがありますが、私が読んだ限りでは、このアプローチをとる特定の実装についてコミュニティがどのように感じているかはわかりません。(Cookie と同様に、これについては後でもう一度説明します。)
ユーザー名とパスワードで誰かがログインしているとします。Backbone アプリでその情報を保持できます。これを行う AUTH というモデルがあるかもしれません。サーバーにリクエストを送信するたびに、サーバーが認証を行い、特定のリソースへのアクセスを許可または拒否するたびに、そのデータを送信します。基本認証を使用する場合、この情報はヘッダーにあると思います。SSL を使用すると、ネットワーク経由でこの情報を送信する際の主要なセキュリティ上の懸念が軽減されます。以降の説明では、SSL を使用していると仮定します。
これを行うもう 1 つの方法は、暗号化された Cookie、暗号化された Cookie セッションを使用することです。これが、現在のアプリケーションで行っていることです。正直なところ、これが RESTful 原則に違反していると見なされるかどうかはわかりません。ウェブ上の一般的なおしゃべりは、「Cookie が悪い、セッションが悪い」という話が多く、一部の人々は「本当のことを考えろ」と言っています。Cookie を使用すると、誰かがユーザーのコンピューターにアクセスした場合に Cookie の乗っ取りにさらされる可能性がありますが、アプリケーションとセキュリティのニーズによっては、不当なオプションではない場合があります。それは私にとってはうまくいきます。RESTful でない場合は、RESTLike と呼ぶのが好きです。
最後に、セットアップについて説明します。これについてのスタックの意見だけでなく、あなたの考えも得られるとよいでしょう。
基本的に、誰かがメインページにアクセスすると、サーバーが暗号化された Cookie セッションをチェックするように設定しています。Cookie セッションが無効または存在しない場合、ユーザーは通常のページにログインする機会が与えられます。ユーザーがログインすると、その情報が POST 経由で送信されるため、URI ではなくリクエストの本文に含まれます。(POST を使用してリソースを保存するため、これは技術的には REST HTTP 動詞の概念に違反しています。) その情報が処理されると、ユーザー名がチェックされ、一意のソルトによって作成されたハッシュが渡されます。次に、サーバーは暗号化されたセッション Cookie を作成して渡します。ユーザーに戻します。これで、ユーザーが認証を必要とするルートに到達するたびに、サーバーは Cookie をチェックして有効であること (制限時間、ユーザー情報など) を確認し、有効な場合はアクセスを許可します。そうでない場合は、Cookie 情報を破棄し、適切なステータス コードを返します。バックボーン アプリは、認証されていないユーザーの手に渡ってはならないビューとデータをリセットすることでこれに反応し、ログイン画面を表示します。
これがあなたにアイデアを与えることを願っています。これが私のやり方に対する答えですが、誰かが批判やより良いアイデアを持っている場合は、喜んで賛成票を投じます。