3

免責事項: 私は実際には開発者ではありません。時々コードを書くことを楽しんでいます:)

最近、AngularJS とブラウザー側の MVC フレームワーク全般について学び、それを試してみることにしました。Angular のドキュメントのほとんどは、サーバー側のことについて詳しく説明していないため、これはユーザーの自由な選択として残されています。Angular の$resourceサービスを読んだ後、MongoDB や CouchDB などの DB が RESTful インターフェイスを独自に公開していることを知りました。これは明らかな疑問をもたらしました - どうやってそのようなものを保護しますか?

「従来の」Web アプリケーションでは、ユーザーを認証し、データへのアクセスを承認する役割を担うサーバー側のレイヤーがあります。それが完了すると、サーバー側のコードは、固定された一連の資格情報 (webapp ユーザー ID に関係なく同一) を使用して、基礎となるデータ ストア (RDBMS など) と通信します。もちろん、このモデルを複製して、REST インターフェースを公開し、同様に動作する CRUD コードを作成することもできます。を使用したい場合$resource、webapp ユーザーを一部のdbユーザーに関連付ける必要がありますか? コードに表示されるため、一般的な資格情報のセットを使用できません-中間レイヤーを作成しているか、あるユーザーセットを別のユーザーセットに結び付けているようです。

この問題が通常どのように解決されるのか興味があります - ご覧のとおり、私にはいくつかのアイデアがあります。私の経験不足のため、ここでのベストプラクティスに興味があります:) 一般的な意味で、これは少し広い質問になる可能性があります.フォームの検証やその他の「承認」のようなロジックは?

tl;dr : RESTful db アクセスをどのように保護していますか? アプリケーション ロジックをどのように保護しますか?

4

3 に答える 3

3

通常、フロントエンドが通信する RESTful API は独自の実装になります。ユーザーを認証および承認し、DB に保存する前にデータを検証します。

一部のフォーム検証はクライアント側で実行できますが、クライアント データをそのまま信頼するのではなく、バックエンドでもデータ検証を行うことを好みます。

于 2013-02-28T11:20:12.823 に答える
0

私が質問を正しく理解していれば、答えは次のとおりです。最初にすべきことは、バックエンドの残りの呼び出しを保護することです。サーバーセキュリティを設定した後、UIページを保護する必要がありますが、クロムで開発ツールを使用する方法を知っている人に対する実際のセキュリティではありません)角度でUIページを保護するにはどうすればよいですか-非常に簡単です。角度ルーターを使用しましたコントローラーと ui ページをバインドし、リゾルバーもアクセスをチェックします。要するに、次のようなことができます:

.service("AuthService", function() {
  var data = {};
  data.checkAuth = function() {return true;}
  return data;
})

.when("/news", {
    templateUrl: "newsView.html",
    controller: "newsController",
    resolve: {
        checkAuth: function(AuthService){
            return AuthService.checkAuth();
        }
    }
})

controller("newsController", function ($scope, checkAuth) {
    $scope.isAuthenticated = checkAuth;
});

それが役に立てば幸い。

于 2015-04-22T14:06:12.203 に答える
0

簡単な答えはおそらくクッキーです。

ユーザーが認証するとき、これらの認証の詳細の一部を Cookie に入れます。セッション ID か、もっと意味のあるものかもしれません。それが何であれ、必ず暗号化してください。その後、REST 要求が送信されると、Cookie が要求と共に渡されます。

サーバー側の Web フィルターは要求をインターセプトし、要求が認証および承認されていることを確認してから、すべて問題なければ続行します。

于 2013-04-15T15:46:36.473 に答える