2 カスタム・アサーションの作成
トピック
2.1 ポリシー名について
ポリシー名はポリシー・コンテンツの名前属性によって指定されます。ポリシー名は、OWSMリポジトリに存在しないものであることが必要です。いったんポリシーをリポジトリにインポートしたら、ポリシーの名前を編集できなくなります。ポリシー名を変更するには、ポリシーをコピーして別の名前を割り当てる必要があります。
『Oracle Web Services Managerの理解』のポリシーの推奨ネーミング規則に関する項で説明されているポリシーのネーミング規則に従うことをお薦めします。同じ規則がアサーションのネーミングに使用されます。
2.2 Webサービスのためのカスタム・アサーションの開発
カスタム・アサーションを開発する場合は、カスタム・ポリシー・ファイルをインポートして、Webサービスまたはクライアントにアタッチします。
次の各トピックで、さらに詳しく説明します。
2.2.1 カスタム・アサーション・エグゼキュータの作成
カスタム・アサーション・エグゼキュータを作成し、ポリシー・アサーションのロジックを実行および検証します。カスタム・アサーション・エグゼキュータはoracle.wsm.policyengine.impl.AssertionExecutorを拡張する必要があります。
カスタム・アサーション・エグゼキュータの作成時には、次に示すJARファイルがCLASSPATHに含まれていることを確認します。
-
wsm-policy-core.jar -
wsm-agent-core.jar -
oracle.logging-utils_11.1.1.jar(それぞれ、oracle_common/modules/oracle.wsm.common_12.1.2、oracle_common/modules/oracle.wsm.common_12.1.2、およびoracle_common/modulesにあります)
これらのファイルは、必要に応じてCLASSPATHに追加します。
次の例は、Webサービスに対するリクエストのIPアドレスの検証に使用できる、カスタム・アサーション・エグゼキュータを示しています。リクエストのIPアドレスが無効の場合は、FAULT_FAILED_CHECK例外がスローされます。
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;
}
}
次のサンプル・コードを実行して、カスタム・アサーション・エグゼキュータ内のクライアントまたはサービスを特定できます。
String function = (String) getExecutionContext().getProperty("agent.function"); // WSMExecutionConstants.AGENT_FUNCTION
if (function != null)
isService = function.equals("agent.function.service") // WSMExecutionConstants.AGENT_FUNCTION_VAL_SERVICE
独自のカスタム・アサーション・エグゼキュータを開発するために利用可能なAPIの詳細は、Oracle Web Services Manager Java APIリファレンスを参照してください。
2.2.2 カスタム・ポリシー・ファイルの作成
カスタム・ポリシー・ファイルを作成し、バインディングを定義してカスタム・アサーションを構成します。
「カスタム・アサーションのスキーマ・リファレンス」では、カスタム・ポリシー・ファイルとカスタム・アサーションの作成に使用できるスキーマについて説明します。
次の例では、oracle/ip_assertion_policyカスタム・ポリシー・ファイルが定義されます。アサーションは、リクエストに対して有効なIPアドレスのカンマ区切りリストを定義します。
<?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>このカスタム・ポリシー・ファイルをRESTful Webサービスとクライアント・エンドポイントで使用するには、次のようにprovides属性をorasp:ipAssertion要素に追加する必要があります。
<orasp:ipAssertion orawsp:Silent="true" orawsp:Enforced="true"
orawsp:name="WSSecurity IpAssertion Validator"
orawsp:category="security/authentication"
orawsp:provides="{http://schemas.oracle.com/ws/2006/01/policy}REST_HTTP">
</orasp:ipAssertion>
注意:
SOAP Webサービス・エンドポイントを保護するには、orasp:Assertionの説明に従って、provides属性にインテントを指定し、それをカスタム・ポリシー・ファイルのorasp:Assertion要素に追加する必要があります。
2.2.3 カスタム・アサーション・エグゼキュータの指定
カスタム・ポリシー・ファイルまたはpolicy-config.xmlファイルで、カスタム・アサーション・エグゼキュータを指定します。
次の各トピックで、さらに詳しく説明します。
2.2.3.1 カスタム・ポリシー・ファイルでのカスタム・アサーション・エグゼキュータの指定
カスタム・ポリシーを更新して、orawsp:Implementation要素にカスタム・エグゼキュータ情報を指定できます。これを次の例に示します。
次に、例を示します。
<?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>2.2.3.2 policy-config.xmlファイルでのカスタム・アサーション・エグゼキュータの指定
新しいアサーションのエントリを定義して、そのエントリにカスタム・アサーション・エグゼキュータを関連付ける、policy-config.xmlファイルを作成します。構成ファイルのカスタム・アサーション・エグゼキュータ・クラスも指定できます。
この項には次のトピックが含まれます:
2.2.3.2.1 ポリシー構成ファイルについて
このトピックでは、policy-config.xmlファイルのフォーマットと、Key要素の属性について説明します。
次の例に、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)と一致する必要があります。 「カスタム・ポリシー・ファイルの作成」のカスタム・ポリシー・ファイルの例では、次に示すように、namespaceが<wsp:Policy>タグの一部として定義されています。 xmlns:orasp="http://schemas.oracle.com/ws/2006/01/securitypolicy" |
|
element-name |
要素の名前。この値は、カスタム・ポリシー・ファイルで定義したアサーション名(手順1)と一致する必要があります。 「カスタム・ポリシー・ファイルの作成」のカスタム・ポリシー・ファイルの例では、要素名ipAssertionが次のタグで定義されています。 <orasp:ipAssertion orawsp:Silent="true" orawsp:Enforced="true" orawsp:name="WSSecurity
IpAssertion Validator" orawsp:category="security/authentication"> |
2.2.3.2.2 ポリシー構成ファイルの定義
このトピックでは、ipAssertionポリシーのエントリが含まれている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ファイルは、サーバーのCLASSPATHに含まれている必要があります。「カスタム・アサーションJARファイルの作成」で説明するように、このファイルをカスタム・エグゼキュータのjarファイルに追加してください。
2.2.4 カスタム・アサーションJARファイルの作成
カスタム・アサーション・エグゼキュータとpolicy-config.xmlファイルを含むカスタム・アサーションJARファイルを作成します。
JARファイルの生成には、Oracle JDeveloper、別のIDE、またはjarツールを使用できます。
2.2.5 ポリシー・ストアへのカスタム・ポリシーの追加
カスタム・ポリシーは、Fusion Middleware ControlまたはWLSTを使用することで、ポリシー・ストアに追加できます。
次の各トピックで、さらに詳しく説明します。
2.2.5.1 ポリシー・ストアへのカスタム・ポリシーの追加(Fusion Middleware Controlを使用する場合)
Fusion Middleware Controlを使用して、カスタム・ポリシーをポリシー・ストアに追加できます。
カスタム・ポリシーをWebサービスにアタッチするには、まず、『Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理』のWebサービス・ポリシーのインポートに関する項で説明する手順を実行して、カスタム・ポリシーをインポートする必要があります。
2.2.5.2 ポリシー・ストアへのカスタム・ポリシーの追加(WLSTを使用する場合)
WebLogic Scripting Tool (WLST)コマンドを使用して、カスタム・ポリシーをポリシー・ストアにインポートできます。
詳細は、『Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理』のリポジトリでのドキュメントのインポートおよびエクスポートに関する項を参照してください。
2.2.6 カスタム・アサーションのデプロイ
WLSTコマンドを使用するか、次の手動プロセスによって、カスタム・アサーションJARをCLASSPATHに追加できます。
WLSTコマンドを使用してカスタム・アサーションをデプロイするには、次の手順を実行します。
- WLSTコマンドを起動します。このコマンドは、
ORACLE_HOME/oracle_common/common/bin/wlst.sh(UNIX) またはORACLE_HOME\oracle_common\common\bin\wlst.cmd(Windows)にあります。 -
appendToExtensionLoaderコマンドを実行して、ターゲット・リストで指定したサーバーにカスタム・アサーションjarファイルを追加します。appendToExtensionLoader('path to custom-assertion.jar’, ‘comma separated targets')次に例を示します。
connect('demouser', 'demopassword', 't3://localhost:7001') appendToExtensionLoader(‘/user/home/customAssertion.jar’, ‘server1,server2,server3')
また、カスタム・アサーションJARは、次の手順を実行することで、CLASSPATHに手動で追加することもできます。
- WebLogic Serverを停止します。
- 「カスタム・アサーションJARファイルの作成」の説明に従って作成したカスタム・アサーションJARファイルを
$DOMAIN_HOME/libディレクトリにコピーします。 - WebLogic Serverを再起動します。
WebLogic Serverの起動および停止の詳細は、『Oracle Fusion Middlewareの管理』のOracle WebLogic Serverインスタンスの起動および停止に関する項を参照してください。
2.2.7 Webサービスへのカスタム・ポリシーのアタッチ
カスタム・ポリシーをWebサービスにアタッチする前に、まずWebサービスを作成し、次にFusion Middleware ControlまたはWLSTを使用して、または設計時に、カスタム・ポリシーをアタッチします。
『Oracle WebLogic Server WebLogic Webサービスの理解』のWebLogic Webサービスの実装のロードマップに関する項の情報に従って、Webサービスを作成します。
『Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理』のポリシーのアタッチに関する項の説明に従って、Webサービスにカスタム・ポリシーをアタッチします。
2.3 Webサービスのテスト
Fusion Middleware ControlのWebサービスのテスト・ページを使用して、Webサービスをデプロイしないで、Webサービスの操作をテストし、結果を表示します。
詳細は、『Webサービスの管理』のWebサービスのテストに関する説明を参照してください。
clientgenを使用してWebサービスのクライアント・プロキシを作成することで、Webサービスをテストすることもできます。詳細は、『Oracle WebLogic Server JAX-WS Webサービスの開発』のclientgen Antタスクを使用したクライアント・アーティファクトの生成に関する項を参照してください。