2017-02-15 9 views
5

私はユーザー領域と管理領域を持つアプリケーションを開発しています。私はこれを別々のAngular 2モジュールに分けました。私は、lazy-loadingをうまく実装しているので、/ adminがユーザによって要求されたときにのみ管理モジュールをロードすることができます。角度2のドキュメントから遅延ロードされたモジュールを安全に保護する(角2)

が、私はそうのように "canLoad" ガードを指定できることを参照してください。

{ 
    path: 'admin', 
    loadChildren: 'app/admin/admin.module#AdminModule', 
    canLoad: [AdminGuard] 
    } 

などのようなAdminGuardクラス内の関数canLoadを実装:

canLoad(route: Route): boolean { 
    return this.authService.isAdmin(); 
} 

(ここでisAdmin()はバックエンドAPIを呼び出して現在のユーザーの役割などを返すことができます)

これは実際には、管理者はAdminModuleを読み込みませんか?私が誤解していない限り、このコードはすべてクライアント上にあります。したがって、クライアントが「canLoad」メソッドを変更して常にtrueを返すことを防ぐ何かがありますか?同様に:

canLoad(route: Route): boolean { 
    return true; 
} 

こうすることで、クライアントは任意のモジュールをロードできます。

明らかに、管理ステータスを必要とするバックエンドAPIへの呼び出しはすべて保護されますが、ユーザーには管理UIが表示されるようです。ちょっと変わったようです。誰かが私のためにこれをクリアすることはできますか?

答えて

4

これは大きな質問です。誰かがこれについて詳細な回答をしていれば私は不思議でした。だから、私はこのリンクを見て、かなり大きな会話をしていました。本当に私に突き出し

Angular 2 Reddit Article

つのコメントはこれ一つでした。

一般的には、htmlテンプレートとjsファイルは、十分に気をつけてくれた人のために開封して となります。あなたのSPAはあなたのサーバに (データ:読み込み:json)のみを話すでしょう、そして、テンプレートは にクライアント側でこのデータを入力します。あなたの主な関心事はこのAPIを保護する です。セッション、クッキー、トークンはすべて がここでも有効です。私自身はトークンを使用して認証し、承認します。 API要求にはサーバー署名付きトークンが含まれ、 が検証され、ロールと資格情報が抽出された後、 を使用して、その要求を行う権限があることが決定されます。 が失敗した場合、401はクライアントに許可されていません。角度のある側では、成功したログイン後に受信した トークンを保存し、それ以降のリクエストを に使用します。また、資格情報と役割をデコードし、 でユーザー情報を表示し、ルートを承認します。角度のある経路ガードは、 CanActivateインターフェイスを介して達成されます。{Path: 'protected'、CanActivate:[LoggedInGuard]}、{Path: 'supersecret'、CanActivate:[LoggedInGuard、AdminGuard]}の複数のチェーンを連結できます。 .etcしかし、 クライアント側(読んだ:角)ガードは最終的にUXの問題ではなく、 セキュリティ手段です。知識豊富なハッカーは、dev consoleを使って変数 を混乱させるか、ストレートAPI で完全にバイパスすることができます。何が起こったのかをユーザーに示して、 などのどこかに移動してください。

+0

これは実際の質問に対する回答ではありません。それは良い会話にリンクします。これまで私がこのトピックで見つけた情報は、この機能を持つ明確な理由を特定したり、解決したりすることができません。私は数分前にこの質問を投稿しました:https://stackoverflow.com/questions/47613907/ – BBaysinger

関連する問題