8

特定のユーザーのみがアクセスできる一連のリソースを実装するために、Glassfish で JAX-RS を使用しています。

私の Web サイトに登録されている 2 人のユーザー userA と userB を考えてみます。

  1. userA は独自のリソースを作成しましたhttp://{localhost}/service/user/A
  2. userB は独自のリソースを作成しましたhttp://{localhost}/service/user/B

その後、Glassfish のデフォルトのセキュリティ実装は次のように構成されました。

  1. ユーザー役割はアクセスできます/services/user/*
  2. userA と userB は両方とも User Role にあります。

/service/user/Aしたがって、ログインすると、userA と userB の両方がとにアクセスできます/service/user/B

さて、質問は、それは可能ですか

  • userA は にしかアクセスでき/services/user/Aません。/services/user/B

同時に

  • /services/user/B, but notuserB は/services/user/A`にのみアクセスできます

これは私が信じている一般的なニーズであるため、何かを見逃したに違いないと思います。誰でも助けることができますか?

4

2 に答える 2

2

これは、アプリケーション レベルで実装する必要があるものです。アプリケーション サーバーは、非常に高度なセキュリティ ポリシーについて知る方法がありません。自分で行うこともできます (ユーザー リソースにロジックを追加する)。セキュリティ ポリシーが単純な場合は、それが正しいアプローチかもしれません。それ以外の場合は、JAX-RS と統合できる Spring Security を検討する必要があります。これにより、多くの柔軟性が得られます。

于 2012-10-25T21:02:31.127 に答える
0

調べてみると、JAX-RS と JAAS を使用して上記の問題を解決するのは簡単ではないようです。

そこで、認証を簡単に処理できるかどうかを確認するために、 OAuthを調べることにしました。

何時間も読んだ後、私はオリヴィエが話していることを理解し始めました。私が望んでいたのは、ユーザー ID を URI にバインドすることです。しかし、JAAS や OAuth は実際には他の問題を解決するように設計されています。

  1. JAAS、または役割ベースの認証システムは、一連のユーザーが一連の URI にアクセスすることを承認するように設計されています。おもちゃでいっぱいの部屋のようなものです。ユーザーがルームメイトの役割を果たしたら、このユーザーは部屋の鍵を手に入れ、部屋のすべてのおもちゃで遊んだり、すべてのおもちゃを破壊したりできます。各おもちゃにユーザーの名前を付けて、他の人のおもちゃで遊ばないようにする場合は、JAAS の外部でロジックを実装する必要があります。

  2. OAuth、さらに悪い。ユーザーとURIの間のバインディングにも関係ありません。アクセスが制限されたデータを使用して、サードパーティのバレットソフトウェアを許可することに専念しています. JAAS についての部屋のおもちゃの話を考えてみましょう。あなたは部屋の窓を開けたいと思っていますが、そのための時間がありません。それで、あなたは従者を雇い、彼が部屋にアクセスし、窓を開け、同時におもちゃから離れるための従者の鍵を作りました。OAuth の魔法の部分は、係員にマスターの割り当てを完了するのに十分なリソースが与えられることです。さらに重要なことに、部屋は係員キーを認識することで誰が係員を送ったかを認識します。

ここで、開発者の観点から、係員がウィンドウにアクセスできるのに、おもちゃにはアクセスできない理由を尋ねることができます。つまり、サードパーティのソフトウェアが一部の URI にアクセスできるようにし、他の URI にはアクセスできないようにする方法は? これは OAuth では処理されません。OAuth は、ああ、これはボブの係員であり、それ以外のことはすべて自分で行うということだけを伝えます。

OAuth について完全に悪いことではありません。これにより、この係員が持つ ROLE、この種の係員がアクセスできる URI、ボブの係員がアクセスできるリソースなどを決定する機会が得られます。

これが、読んでいる人の時間を節約するのに役立つことを願っています。そして、お粗末な話について私を責めないでください.私は話をより簡単にするために1時間苦労しました. :)

于 2012-10-29T02:33:03.013 に答える