JACCプロバイダーは、デプロイされているサーバーのプリンシパルからロールへのマッピング機能をどのように使用できますか?


154

JACCプロバイダーを書いています。

途中で、これはの実装を意味しPolicyConfigurationます。

PolicyConfigurationパーミッションがどのロールに生ずるようなどのように、アプリケーションサーバから構成情報を受け付けるための責任があります。これは、現在のユーザーと彼が何をしようとしているのかについての情報Policyが渡されたときに、後で承認の決定を行うことができるようにするためです。

ただし、PolicyConfiguration役割とその権限との間のマッピングを維持し、Principalsそれらをそれらの役割に割り当てることは、の(残虐な)契約の一部ではありません。

通常、常に、実際には、アプリケーションサーバーがこのマッピングを格納します。たとえば、Glassfishでは、Java EEモジュールなどsun-web.xmlを提供することによって、このマッピングに影響を与えsun-ejb-jar.xmlます。(これらのベンダー固有のファイルは、たとえば、superusersのアプリケーションロールが割り当てられるグループであることを伝える責任がありadminsます。)

これらのファイルが提供する機能を再利用したいのですが、できるだけ幅広いアプリケーションサーバーで使用したいと考えています。

これは-完全に恣意的-この問題に対するIBMの見解です。これは私がしたいことは本質的に不可能であるという私の疑念を裏付けるものです。(私の特定のJava EE契約は、それが印刷された紙に値しないという私の場合の弾薬はもっと多い。)

私の質問:初心者のために、GlassfishとJBossのこのプリンシパルからロールへのマッピング情報をどのように取得しPolicyConfigurationますか 私が知らない標準的な方法がある場合、私はすべての耳にしています。


7
この問題について何か進展はありましたか?ポータブルWebアプリケーションを構築するために、JACCプロバイダーとJASPIC認証プロバイダーも記述したいと思います...
perissf

これもあまり有望に聞こえません:docs.oracle.com/cd/E24329_01/web.1211/e24485/…をBecause JSR-115 does not define how to address role mapping, WebLogic JACC classes are used for role-to-principal mapping.参照してください
Arjan Tijms

2
現時点での私の見解は、JACCプロバイダーがJASPICプロバイダーに接続されていることを常に確認する必要があることです。そのため、作成する義務もあります。私はこのルートをまだ行っていませんが、試してみることができます。
Laird Nelson

@LairdNelsonさん、時間があれば、JASPICコメントの周りに回答を書いてください。これは有望に聞こえますが、この質問には300の評判の賞金があります。
ジムハーク2013

5
こんにちは; 誰もが疑惑を抱かせようとしない。:-)急いで思いつくことができるという答えはここにはありません。私がRon Monzilloに、プリンシパルからロールへの割り当てをJACCプロバイダーが理解できる方法でJACCプロバイダーに「組み込む」唯一の方法は、JASPIC実装をそれに効果的に結合させることであると私に忠告しました。
Laird Nelson

回答:


3

簡単に言えば、標準的な方法はありません。

GlassfishとJBossはプリンシパルからロールへのマッピングをサポートしていますが、JACCはすべてのコンテナがそうであるとは想定していないため、これらのマッピングを保持する責任をJACCプロバイダーの実装に委任します。ドキュメントから(参照:PolicyConfiguration.addToRoleメソッド):

ロールに追加されたすべての権限が「ロールにマップされた」プリンシパルに確実に付与されるようにするのは、ポリシープロバイダーの仕事です。

つまり、コンテナごとにJACCプロバイダー内で自分で実装する必要があります。たとえば、JBossの場合、のサブクラスの1つを使用できますAbstractRolesMappingProvider


余談ですが、ポータブルプロバイダーはコンテナーロールマッピングを無視することを選択できます。たとえば、アプリケーションが何らかの方法で(PolicyContextHandlerたとえば、その目的のためにプロバイダーによって具体的に登録されたものを介して)それ以外のことを伝えない限り、プリンシパルは同じ名前のアプリケーションロールを意味すると想定できます。別のプロバイダーは、ロールの概念を完全に無視して(したがって、コンテナーが提供するPolicyConfiguration)、代わりに(アプリケーションが提供する)プリンシパルからパーミッションへのマッピング(およびそれらのパーミッションをJACCのものに限定する必要がない場合)だけで操作することもできます。
Uux

サイドノート#2:Java EE 8以降、1対1のグループからロールへのマッピングが新しいデフォルトになりました(ただし、ロールはまだ静的に事前に宣言する必要があるため、中間に到達するだけです-カスタムJACCプロバイダーが存在しない場合)実質的に)。
Uux
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.