| Oracle® Fusion Middleware Oracle Web Services Manager拡張ガイド 11gリリース1 (11.1.1.6) B66193-01 |
|
![]() 前へ |
![]() 次へ |
この章では、カスタム・アサーションを開発する方法について説明します。内容は、次のとおりです。
ポリシー名はポリシー・コンテンツの名前属性によって指定されます。ポリシー名は、ポリシー・ストアに存在しないものであることが必要です。いったんポリシーをポリシー・ストアにインポートしたら、ポリシーの名前を編集できなくなります。ポリシー名を変更するには、ポリシーを コピー して別の名前を割り当てます。
『Oracle Fusion Middleware Oracle Fusion Middleware Webサービスのためのセキュリティおよび管理者ガイド』のポリシーの推奨ネーミング規則に関する項に記載されているポリシーのネーミング規則に従うことをお薦めします。同じ規則がアサーションのネーミングに使用されます。
カスタム・アサーションを開発するには、次のファイルを作成する必要があります。
カスタム・アサーション・エグゼキュータ: Javaクラスとその解析および強制ロジックを実装します。
カスタム・ポリシー・ファイル: カスタム・アサーションのバインディングの定義と構成ができます。
policy-config.xmlファイル: カスタム・ポリシー・ファイルを登録します。
次のファイルのいずれかのカスタム・アサーション・エグゼキュータを指定できます。
カスタム・ポリシー・ファイル
policy-config.xmlファイル
カスタム・アサーション・エグゼキュータとpolicy-config.xmlファイルをJARファイルとしてパッケージ化し、JARファイルをドメインのCLASSPATHで使用できるようにします。その後、必要に応じて、カスタム・ポリシー・ファイルをインポートしてWebサービスまたはクライアントに添付します。
次の項では、プロセスの各手順を説明します。
カスタム・アサーション・エグゼキュータを作成し、ポリシー・アサーションのロジックを実行および検証します。カスタム・アサーション・エグゼキュータはoracle.wsm.policyengine.impl.AssertionExecutorを拡張する必要があります。
カスタム・アサーション・エグゼキュータを構築する際に、wsm-policy-core.jar、wsm-agent-core.jarおよびoracle.logging-utils_11.1.1.jarのJARファイル(それぞれ、oracle_common/modules/oracle.wsm.common_11.1.1、oracle_common/modules/oracle.wsm.agent.common_11.1.1およびoracle_common/moduleに存在)がCLASSPATHにあることを確認します。ファイルをクラスパスに追加します。
例2-1は、Webサービスに対するリクエストのIPアドレスを検証するために使用できるカスタム・アサーション・エグゼキュータの例です。リクエストのIPアドレスが無効の場合は、FAULT_FAILED_CHECK例外がスローされます。
独自のカスタム・アサーション・エグゼキュータを開発するために利用可能なAPIの詳細は、Oracle Web Services Manager Java APIリファレンスを参照してください。
例2-1 カスタム・アサーション・エグゼキュータの例
package sampleassertion;
import oracle.wsm.common.sdk.IContext;
import oracle.wsm.common.sdk.IMessageContext;
import oracle.wsm.common.sdk.IResult;
import oracle.wsm.common.sdk.Result;
import oracle.wsm.common.sdk.WSMException;
import oracle.wsm.policy.model.IAssertionBindings;
import oracle.wsm.policy.model.IConfig;
import oracle.wsm.policy.model.IPropertySet;
import oracle.wsm.policy.model.ISimpleOracleAssertion;
import oracle.wsm.policy.model.impl.SimpleAssertion;
import oracle.wsm.policyengine.impl.AssertionExecutor;
public class IpAssertionExecutor extends AssertionExecutor {
public IpAssertionExecutor() {
}
public void destroy() {
}
public void init(oracle.wsm.policy.model.IAssertion assertion,
oracle.wsm.policyengine.IExecutionContext econtext,
oracle.wsm.common.sdk.IContext context) {
this.assertion = assertion;
this.econtext = econtext;
}
public oracle.wsm.policyengine.IExecutionContext getExecutionContext() {
return this.econtext;
}
public boolean isAssertionEnabled() {
return ((ISimpleOracleAssertion)this.assertion).isEnforced();
}
public String getAssertionName() {
return this.assertion.getQName().toString();
}
/**
* @param context
* @return
*/
public IResult execute(IContext context) throws WSMException {
try {
IAssertionBindings bindings =
((SimpleAssertion)(this.assertion)).getBindings();
IConfig config = bindings.getConfigs().get(0);
IPropertySet propertyset = config.getPropertySets().get(0);
String valid_ips =
propertyset.getPropertyByName("valid_ips").getValue();
String ipAddr = ((IMessageContext)context).getRemoteAddr();
IResult result = new Result();
if (valid_ips != null && valid_ips.trim().length() > 0) {
String[] valid_ips_array = valid_ips.split(",");
boolean isPresent = false;
for (String valid_ip : valid_ips_array) {
if (ipAddr.equals(valid_ip.trim())) {
isPresent = true;
}
}
if (isPresent) {
result.setStatus(IResult.SUCCEEDED);
} else {
result.setStatus(IResult.FAILED);
result.setFault(new WSMException(WSMException.FAULT_FAILED_CHECK));
}
} else {
result.setStatus(IResult.SUCCEEDED);
}
return result;
} catch (Exception e) {
throw new WSMException(WSMException.FAULT_FAILED_CHECK, e);
}
}
public oracle.wsm.common.sdk.IResult postExecute(oracle.wsm.common.sdk.IContext p1) {
IResult result = new Result();
result.setStatus(IResult.SUCCEEDED);
return result;
}
}
カスタム・ポリシー・ファイルを作成し、カスタム・アサーションのバインディングを定義して構成します。「カスタム・アサーションのスキーマ参照」で、カスタム・ポリシー・ファイルとカスタム・アサーションの作成に使用できるスキーマについて説明します。
次の例では、oracle/ip_assertion_policyカスタム・ポリシー・ファイルが定義されます。アサーションは、リクエストに対して有効なIPアドレスのカンマ区切りのリストを定義します。
例2-2 カスタム・ポリシー・ファイルの例
<?xml version = '1.0' encoding = 'UTF-8'?>
<wsp:Policy xmlns="http://schemas.xmlsoap.org/ws/2004/09/policy"
xmlns:orasp="http://schemas.oracle.com/ws/2006/01/securitypolicy"
orawsp:status="enabled"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" orawsp:category="security"
orawsp:attachTo="binding.server" wsu:Id="ip_assertion_policy"
xmlns:orawsp="http://schemas.oracle.com/ws/2006/01/policy"
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
wsp:Name="oracle/ip_assertion_policy">
<orasp:ipAssertion orawsp:Silent="true" orawsp:Enforced="true"
orawsp:name="WSSecurity IpAssertion Validator" orawsp:category="security/authentication">
<orawsp:bindings>
<orawsp:Config orawsp:name="ipassertion" orawsp:configType="declarative">
<orawsp:PropertySet orawsp:name="valid_ips">
<orawsp:Property orawsp:name="valid_ips" orawsp:type="string"
orawsp:contentType="constant">
<orawsp:Value>127.0.0.1,192.168.1.1</orawsp:Value>
</orawsp:Property>
</orawsp:PropertySet>
</orawsp:Config>
</orawsp:bindings>
</orasp:ipAssertion>
</wsp:Policy>
次のファイルのいずれかのカスタム・アサーション・エグゼキュータを指定します。
カスタム・ポリシー・ファイル
policy-config.xmlファイル
カスタム・ポリシー・ファイルでのカスタム・アサーション・エグゼキュータの指定
例2-3に示すように、カスタム・ポリシーを更新してorawsp:Implementation要素のカスタム・エグゼキュータ情報を指定します。
例2-3 カスタム・ポリシー・ファイルでのカスタム・アサーション・エグゼキュータの指定
<?xml version = '1.0' encoding = 'UTF-8'?><wsp:Policy
xmlns="http://schemas.xmlsoap.org/ws/2004/09/policy"
xmlns:orasp="http://schemas.oracle.com/ws/2006/01/securitypolicy"
orawsp:status="enabled"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" orawsp:category="security"
orawsp:attachTo="binding.server" wsu:Id="ip_assertion_policy"
xmlns:orawsp="http://schemas.oracle.com/ws/2006/01/policy"
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
wsp:Name="oracle/ip_assertion_policy">
<orasp:ipAssertion orawsp:Silent="true" orawsp:Enforced="true"
orawsp:name="WSSecurity IpAsertion validator" orawsp:category="security/authentication">
<orawsp:bindings>
<orawsp:Implementation>sampleassertion.IpAssertionExecutor</orawsp:Implementation>
<orawsp:Config orawsp:name="ipassertion" orawsp:configType="declarative">
<orawsp:PropertySet orawsp:name="valid_ips">
<orawsp:Property orawsp:name="valid_ips" orawsp:type="string"
orawsp:contentType="constant">
<orawsp:Value>140.87.6.143,10.178.93.107</orawsp:Value>
</orawsp:Property>
</orawsp:PropertySet>
</orawsp:Config>
</orawsp:bindings>
</orasp:ipAssertion>
</wsp:Policy>
policy-config.xmlファイルでのカスタム・アサーション・エグゼキュータの指定
新しいアサーションのエントリを定義してそのカスタム・アサーション・エグゼキュータと関連付ける、policy-config.xmlファイルを作成します。
policy-config.xmlファイルのフォーマットは、例2-4に示されています。
例2-4 policy-config.xmlファイルのフォーマット
<?xml version="1.0" encoding="UTF-8"?>
<policy-config>
<policy-model-config>
<entry>
<key namespace="namespace" element-name="elementname"/>
<executor-classname>assertionclass</executor-classname>
</entry>
</policy-model-config>
</policy-config>
表2-1に、key要素の属性をリストしています。
表2-1 key要素の属性
| 属性 | 説明 |
|---|---|
|
namespace |
ポリシーのネームスペース。この値は、カスタム・ポリシー・ファイルで定義したネームスペース(手順1)と一致する必要があります。 例2-2では、ネームスペースは次のように<wsp:Policy>タグの一部として定義されます。
xmlns:orasp="http://schemas.oracle.com/ws/2006/01/securitypolicy"
|
|
element-name |
要素の名前。この値は、カスタム・ポリシー・ファイルで定義したアサーション名(手順1)と一致する必要があります。 例2-2では、要素名ipAssertionは次のタグで定義されています。
<orasp:ipAssertion orawsp:Silent="true" orawsp:Enforced="true" orawsp:name="WSSecurity
IpAssertion Validator" orawsp:category="security/authentication">
|
例2-5に、ipAssertionポリシーのエントリを含むpolicy-config.xmlファイルの例を示します。
例2-5 policy-config.xmlファイルの例
<?xml version="1.0" encoding="UTF-8"?>
<policy-config>
<policy-model-config>
<entry>
<key namespace="http://schemas.oracle.com/ws/2006/01/securitypolicy"
element-name="ipAssertion"/>
<executor-classname>sampleassertion.IpAssertionExecutor</executor-classname>
</entry>
</policy-model-config>
</policy-config>
|
注意: policy-config.xmlファイルはサーバーのクラスパスにある必要があります。手順4: JARファイルの作成に関する項に説明されているように、このファイルをカスタム・エグゼキュータのjarファイルに追加することもできます。 |
カスタム・アサーション・エグゼキュータとpolicy-config.xmlファイルを含むカスタム・アサーションJARファイルを作成します。JARファイルの生成には、Oracle JDeveloper、別のIDE、またはjarツールを使用できます。
次の各項で説明するように、Fusion Middleware ControlまたはWLSTを使用して、カスタム・ポリシーをポリシー・ストアに追加します。
Fusion Middleware Controlの使用
カスタム・ポリシーをWebサービスに添付できるようにするには、『Oracle Fusion Middleware Webサービスのためのセキュリティおよび管理者ガイド』のWebサービス・ポリシーのインポートに関する項の手順に従ってカスタム・ポリシーをインポートする必要があります。
WLSTの使用
WebLogic Scripting Tool (WLST)コマンドを使用して、カスタム・ポリシーをインポートします。詳細は、『Oracle Fusion Middleware Webサービスのためのセキュリティおよび管理者ガイド』のポリシーの移行に関する項を参照してください。
カスタム・アサーションJARファイルをCLASSPATHに追加するには、次の手順を実行します。
WebLogic Serverを停止します。
WebLogic Serverの停止の詳細は、『Oracle WebLogic Serverサーバーの起動と停止の管理』を参照してください。
手順4で作成したカスタム・アサーションJARファイルを、$DOMAIN_HOME/libディレクトリにコピーします。
WebLogic Serverを再起動します。
WebLogic Serverの再起動の詳細は、『Oracle WebLogic Serverサーバーの起動と停止の管理』を参照してください。
『Oracle WebLogic Server WebLogic Webサービスの紹介』のWebLogic Webサービスの実装のロードマップに関する項に説明されている情報に従って、Webサービスを作成します。
次の項で説明されているように、Webサービスにカスタム・ポリシーを添付します。
Fusion Middleware Controlの使用
『Oracle Fusion Middleware Webサービスのためのセキュリティおよび管理者ガイド』のFusion Middleware ControlによるWebサービスへのポリシーの添付に関する項に説明されているように、Fusion Middleware Controlを使用してWebサービスにカスタム・ポリシーを添付します。
WebLogic管理コンソールの使用
Oracle WebLogic Server管理コンソールのヘルプのWebサービスへのWS-Policyファイルの添付に関する項に説明されているように、WebLogic管理コンソールを使用してWebサービスにカスタム・ポリシーを添付します。
WLSTの使用
『Oracle Fusion Middleware Webサービスのためのセキュリティおよび管理者ガイド』のWLSTによるWebサービスへのポリシーの添付に関する項に説明されているように、WLSTを使用してWebサービスにカスタム・ポリシーを添付します。
JDeveloperの使用
JDeveloperのオンライン・ヘルプのカスタムWebサービス・ポリシーの使用に関する項に説明されているように、JDeveloperを使用してWebサービスにカスタム・ポリシーを添付します。
Fusion Middleware ControlのWebサービスのテスト・ページを使用して、Webサービスをデプロイしないで、Webサービスの操作をテストし、結果を表示します。詳細は、『Oracle Fusion Middleware Web Servicesセキュリティおよび管理者ガイド』のWebサービスのテストに関する項を参照してください。
Webサービスのカスタム・アサーションの開発に関する項で作成したWebサービスのカスタム・アサーションから、クライアント・ポリシーを作成します。クライアント・ポリシーの生成の詳細は、『Oracle Fusion Middleware Web Servicesセキュリティおよび管理者ガイド』のクライアント・ポリシーの生成に関する項を参照してください。