2016-12-02 6 views
0

私はREST(Spring MVC)バックエンドと純粋なJavaScriptフロントエンドを持つSpring Bootアプリケーションを持っています。最近、春のセキュリティを使用してセキュリティを有効にしました。どのように特権を持つユーザにがあるのか​​、つまりについては、ロールに応じてどのようなコントロールをユーザに提示する必要があるのか​​を説明しています。私が試した何のためRESTアプリケーションのUIの特権エンドポイント

  • 私達はちょうど公開し、エンドポイント当局(役割)のリストと、それにUIの契約を許すことができます。これはバックエンドにとっては簡単ですが、バックエンドではROLE - > Allowed URLsのマッピングを維持し、フロントエンドでも同じことが行われます。ある時点でこれらは分岐します(私は確信しています)。使用された場合、403 - UnauthorizedというUIコントロールが表示されます。

  • これはRESTの理由でURLを中心にしています。質問:に回答するエンドポイント(例:/security/privileges?url=...&method=...)を持っていますか?リクエストメソッドyでURL xにアクセスできましたか?これにより、UIはURLだけに焦点を当てることができます。あなたは@Pre/@Post注釈を通じてメソッドレベルのセキュリティでフィルターを通してWebセキュリティを組み合わせた特別なときには(バックエンドのために不可能悪夢/のように見えます

質問:。

  1. は、私がどのようにベストプラクティスに探していますURLを中心にするか、役割のリストを送信するだけですか?

  2. URL中心のアプローチを行った人は、コントローラのメソを調べる方法がありますセキュリティチェックに合格するかどうかを判断するWebInvocationPrivilegeEvaluatorは、メソッドレベルのセキュリティを考慮していないため、十分ではありません。

EDIT: ロールのリストを送信するとアプローチについての私の疑問を明確にします。私が行う場合は、その:

MVCコントローラ:

@PreAuthorize("hasAnyRole('ADMIN', 'EDITOR'") 
@RequestMapping("/editStuff") 
public void editStuff(...) { 
    ... 
} 

JS:役割EDITORまたはADMINのいずれかを有するため

if (hasRole('ADMIN') || hasRole('EDITOR')) { 
    showEditControllWhichOnClickCalls('/editStuff'); 
} 

明らかに存在重複してチェック。

if (doIHaveAccessTo('/editStuff', 'POST')) { 
    showEditControllWhichOnClickCalls('/editStuff'); 
} 
+0

に答えるために、ロールのリストをみます。 URLは十分なものです。 _ "ある時点でこれらは分岐する" _ == _ "ある時点で、私のコードにはバグが含まれているでしょう"そのため、あなたは自動テストをしています。 – zeroflagL

+0

ご意見ありがとうございます。 2つの場所で管理しなければならない複製されたコードは私にとってバグと同じではありません。私は役割のリストを送ることについての疑問を明確にします。 –

+0

別のポイント・ビューを使うことをお勧めします。バックエンドを忘れて、それが他人によって提供されたと想像してください。どの公開APIでもそうです。どのようにあなたのクライアントアプリケーションにセキュリティを組み込むのが好きですか? Btw:クライアントアプリケーションを開発するだけの場合は、既存のロールを含めることができないということは、バグです。 URLは間違いなく十分です。あなたはメディアタイプAのための権利を読んだり書いたりする権利を持っているかもしれませんが、Bはそうではありません。それはすべてUIに影響します... – zeroflagL

答えて

0

ガラス張り:ログインのafer あなたはUserDetailsは、すべての役割を持つオブジェクトreciveとすべきである一方、あなたはJSで行う場合、それはあまり私に連結されたに見えます(理想的には一つの場所で定数としてURLを維持します)ログインしているユーザーに関連する特権。この情報に基づいて、UIのどのコントロールを隠すか表示するかを決めることができます。

バックエンド: 任意のSSOシステムを使用して、成功したログイン後にユーザーを認証することができます。セッション、remember-meトークンは問題ではありません。これは、SecurityContext内のすべての要求を認証オブジェクトと関連付けるだけで、異なるサービスへのアクセス権を管理することができます。トークンについてあなたがそこに読むことができます: http://docs.spring.io/spring-security/site/docs/3.0.x/reference/remember-me.html

は、任意の具体的な質問をして、私は_「それはURL中心であるか、または単にロールのリストを送信する必要があります」_

関連する問題