8

管理ページ、つまり通常のユーザーが見ることができないページを保護するための AngularJS での最善のアプローチは何だろうと思っています。明らかに、バックエンド認証がありますが、AngularJS アプリはクライアント側であるため、理論的にはルーティングを見て、それらの URL に直接アクセスし、管理ページを見ることができます。

Express、PassportJS、MongoDB (Mongoose) をバックエンドとして使用しています。当然、作成、削除時にサーバー側の認証があるため、管理ページとやり取りすることはできません...適切なアクセス。ただし、アプリは完全にクライアント側の JS であるため、人々はルーティングなどを変更するだけなので、これは不可能だと思います。これについて最善の方法は何ですか?ご意見ありがとうございます。

4

6 に答える 6

4

routeProvider 内にチェックを入れます。これは、認証が必要なすべてのルートに対して行う必要があります。重複を避けるために、個別のメソッドを作成して各ルートに貼り付けることもできます。

$routeProvider
.when('/profile', {
  templateUrl: 'views/profile.html',
  controller: 'ProfileCtrl',
  resolve: {
    validate: function($q, $location) {
      // Either you could maintain an array of hashes on client side
      // a user do not have access to without login
      // Or hit the backend url to check it more securely
      var validateAccess = $q.defer();
      var isAllowed = ['profile', 'index', 'dashboard'].indexOf($location.hash()) !== -1;

      if (!isAllowed) {
        $location.path('/login');
      }

      validateAccess.resolve();
      return validateAccess.promise;
    }
  }
})
.otherwise({
  redirectTo: '/'
});
于 2013-09-22T14:12:40.240 に答える
2

この質問は少し古いですが、誰かが解決策を探している場合は、リソース ファイルを使用して html テンプレートを保存し、webapi を使用してそれを取得し、権限を検証し、ユーザーが認証された場合にのみ html を返します。

于 2014-05-12T12:07:23.573 に答える
0

これらのページを管理者以外のユーザーに提供したくないのはなぜですか? 人々が「見てはいけない」ものを見るのをやめさせなければならないという本能以外に、これを気にする実際の理由はありますか?

セキュリティが適切に構成されている場合、管理者以外のユーザーは管理データにアクセスしたり、管理操作を実行したりできません。とにかく使用できない管理画面が表示されないようにするための精巧な方法を発明するのではなく、そこに集中する必要があります。これに費やす時間は基本的に時間の無駄であり、より重要なことに費やすべきです。

于 2013-09-22T13:59:46.767 に答える
-1

私はクリス・ルッソの懸念に同意します。これはすべてセキュリティの問題です。フロントエンドに angular を使用している場合、誰かが Web サイト/アプリケーションを攻撃しようとした場合にアプリケーションを保護する強力な機能を持つフレームワークが必要です。Webアプリケーションを保護する機能が証明されているSpringフレームワーク(spring_security)をお勧めします。ROLE_USER や ROLE_ADMIN などの各ユーザーにロールを割り当てる必要があります。その方法を詳しく掘り下げることはしませんが、これはあなたの懸念を解決するのに役立ちます. :)

于 2014-06-17T14:02:47.187 に答える