58

私はangularjsを初めて使用しています...

ドキュメントを読み、チュートリアルを完了しました。私も自分で何か他のことを試してみましたが、物事は私にとって理にかなっています。

どうやって安全な認証システムを作るのだろう。

簡単な部分: コードはありません。コードが実行する操作について説明します。

ユーザー名とパスワードのテキスト入力という古典的なフォームがあります。

ユーザーはフォームに入力し、Enter キーを押します。

ajax リクエストが開始され、応答は JSON で、「あなたを知っています」または「あなたが誰なのかわかりません」などのメッセージが返されます。

今必要なのは、アプリケーションのさまざまなビュー間で、訪問者のログに記録されたステータス (またはログに記録されていない) を維持することです。

この目的を達成するために、誰かが変数 ($scope.isLogged = true) を設定し、他の誰かが Cookie を使用することをインターネットで読みました。ただし、javascript 変数と Cookie は、firebug または同様の開発ツールを使用して簡単に編集できます。

...そして最後に質問:

angularjsアプリで安全な認証システムを実現するための提案はありますか?

4

5 に答える 5

55

ユーザーは実行環境 (つまり、ブラウザー) を完全に制御できるため、angularjs では何も許可できません。各チェック、ケース、if - 考えられるものは何でも - 改ざんされる可能性があります。非対称キーを使用してローカル暗号化を実行し、ローカル データをある程度安全に保存する JavaScript ライブラリがありますが、実際には探しているものではありません。

セッションを使用して、通常のアプリケーションで行う標準的な方法で、サーバー上で物事を承認できますし、承認する必要があります。特別なコードは必要ありません。ajax 呼び出しは通常のセッション Cookie を使用します。アプリケーションは、認証されているかどうかを知る必要はありません。サーバーが何を考えているかを確認するだけで済みます。

angularjs アプリケーションの観点からは、「ログイン」または「ログアウト」は、ユーザーに対する GUI ヒントにすぎません。

于 2013-02-09T22:44:01.470 に答える
4

まず第一に、クライアント側のデータは常に操作または改ざんされる可能性があります。

有効なセッションIDが簡単に推測できず、セッショントークンをクライアントのIPに関連付けるなどの手段がある限り、それについて大きな問題はありません。

理論的には、サーバー側で暗号化する限り、Cookieを暗号化することもできます。

Cookieを暗号化する方法の詳細については、サーバー側のドキュメントを参照してください(Express.jsの場合はhttp://expressjs.com/api.html#res.cookieなど)。

于 2013-02-09T20:48:38.960 に答える