Oracle® Fusion Middleware Oracle WebLogic Serverセキュリティ・プロバイダの開発 12c 12c (12.2.1.3.0) E90323-01 |
|
![]() 前 |
![]() 次 |
裁決とは、複数の認可プロバイダが構成されている場合に発生するおそれのある認可上の競合を、それぞれの認可プロバイダのアクセス決定の結果を比較検討することで解消する手続きです。WebLogic Serverでは、裁決プロバイダを使用して、複数のアクセス決定から返される結果を調停し、PERMIT
かDENY
の最終判定を下します。また、裁決プロバイダでは、単一の認可プロバイダのアクセス決定からABSTAIN
の回答が返されたときにどうすべきかを指定することもできます。
この章の内容は次のとおりです。
WebLogic Serverのデフォルト(つまりアクティブな)セキュリティ・レルムにはWebLogic裁決プロバイダが含まれています。WebLogic裁決プロバイダは、複数の認可プロバイダのアクセス決定から異なる結果が返された場合に裁決を行い、WebLogicリソースへのアクセスを許可するかどうかを最終的に判定します。
WebLogic裁決プロバイダには、動作を制御する「完全一致の許可が必要」という属性があります。「完全一致の許可が必要」属性は、デフォルトではTRUE
に設定されており、WebLogic裁決プロバイダはその設定に従って次のように動作します。
すべての認可プロバイダのアクセス決定がPERMIT
を返した場合、最終的な判定としてTRUE
を返します(つまりWebLogicリソースへのアクセスは許可されます)。
一部の認可プロバイダのアクセス決定がPERMIT
を返し、その他がABSTAIN
を返した場合、FALSE
を返します(つまりWebLogicリソースへのアクセスは拒否されます)。
いずれかの認可プロバイダのアクセス決定がABSTAIN
またはDENY
を返した場合、最終的な判定としてFALSE
を返します(つまりWebLogicリソースへのアクセスは拒否されます)。
「完全一致の許可が必要」属性をFALSE
に変更した場合、WebLogic裁決プロバイダは次のように動作します。
すべての認可プロバイダのアクセス決定がPERMIT
を返した場合、最終的な判定としてTRUE
を返します(つまりWebLogicリソースへのアクセスは許可されます)。
一部の認可プロバイダのアクセス決定がPERMIT
を返し、その他がABSTAIN
を返した場合、最終的な判定としてTRUE
を返します(つまりWebLogicリソースへのアクセスは許可されます)。
いずれかの認可プロバイダのアクセス決定がDENY
を返した場合、最終的な判定としてFALSE
を返します(つまりWebLogicリソースへのアクセスは拒否されます)。
注意:
「完全一致の許可が必要」属性は、WebLogic裁決プロバイダを構成するときに設定します。『Oracle WebLogic Serverセキュリティの管理』のWebLogic裁決プロバイダの構成に関する項を参照してください。
前述の説明と異なる動作の裁決プロバイダが必要な場合、カスタム裁決プロバイダを開発する必要があります。(裁決プロバイダでは、1つの認可プロバイダのアクセス決定がABSTAIN
を返した場合に、指定したセキュリティ要件に基づいてどのように対処するかを指定することもできます。)
WebLogic裁決プロバイダが開発者のニーズを満たさない場合、次の手順でカスタム裁決プロバイダを開発することができます。
適切なSSPIによるランタイム・クラスの作成、または必要に応じてバルク裁決プロバイダを使用
「WebLogic MBeanMakerを使用してMBeanタイプを生成する」で説明されている手順を実行してカスタム裁決プロバイダのMBeanタイプを生成
ランタイム・クラスを作成する前に、以下の作業が必要です。
この情報を理解し、設計に関する判断を下したら、次の手順でカスタム裁決プロバイダのランタイム・クラスを作成します。
AdjudicationProviderV2
SSPIを実装するには、Provider SSPIの目的についてで説明されているメソッドおよび次のメソッドの実装を提供する必要があります。
getAdjudicator
public AdjudicatorV2 getAdjudicator()
getAdjudicator
メソッドは、AdjudicatorV2
SSPIの実装を取得します。MyAdjudicationProviderImpl
.java
という1つのランタイム・クラスの場合、getAdjudicator
メソッドの実装は次のようになります。
return this;
ランタイム・クラスが2つの場合、getAdjudicator
メソッドの実装は次のようになります。
return new MyAdjudicatorImpl;
これは、AdjudicationProviderV2
SSPIを実装するランタイム・クラスが、AdjudicatorV2
SSPIを実装するクラスを取得する場合のファクトリとして使用されるためです。
Oracle WebLogic Server Java APIリファレンスを参照してください。
AdjudicatorV2
SSPIを実装するには、以下のメソッドの実装を提供する必要があります。
initialize
public void initialize(AuthorizerMBean[] accessDecisionClassNames)
initialize
メソッドは、「アクセスは許されるか」という質問への回答を得るために呼び出されるすべての構成済認可プロバイダのアクセス決定の名前を初期化します。accessDecisionClassNames
パラメータは、裁決プロバイダのadjudicate
メソッドで特定のアクセス決定による判定結果を支持するために使用することもできます。認可プロバイダとアクセス決定の詳細は、「認可プロバイダ」を参照してください。
adjudicate
public boolean adjudicate(Result[] results, Resource resource, ContextHandler handler)
adjudicate
メソッドは、構成済認可プロバイダのアクセス決定から返された判定結果をすべて受け取り、「アクセスは許されるか」という質問への回答を決定します。
Oracle WebLogic Server Java APIリファレンスを参照してください。
WebLogic Serverのこのリリースには、以下に示すバルク・アクセス・バージョンの裁決プロバイダSSPIインタフェースがあります。
BulkAdjudicationProvider
BulkAdjudicator
バルク・アクセスSSPIインタフェースを使用すると、裁決プロバイダにおいて1回の呼出しで複数の判定リクエストを取得できます。これまでのように、たとえば「for」
ループで複数の呼出しを実行する必要はありません。バルクSSPIバリアントの目的は、プロバイダ実装において内部的なパフォーマンスの最適化を利用できるようにすることです。たとえば、渡されたResource
オブジェクトの多くが同じポリシーで保護されていることを検出することで、それらの判定結果が同じになると推測できるようになります。
バルク・バージョンでないSSPIインタフェースとバルク・バージョンのSSPIインタフェースの使用方法には若干の違いがあります。
BulkAdjudicator.adjudicate()
メソッドはWebLogic Serverの認可マネージャによって渡されたMap (Resource, Result)
インスタンス群のList
を取り、これにはバルク・アクセス決定の結果が含まれます。結果の順序はBulkAdjudicator.initialize()
メソッドに渡されたアクセス決定クラス名の順序と同じです。
BulkAdjudicator.adjudicate()
メソッドはResource
オブジェクトのSet
を返すことにも注意が必要です。このセットにResource
オブジェクトがある場合、そのオブジェクトへのアクセスが付与されていますが、そうでない場合にはアクセスは拒否されています。