Oracle® Fusion Middleware Oracle WebLogic Server WebLogic Webサービスの紹介 11g リリース1(10.3.5) B61646-03 |
|
前 |
次 |
Oracle社はMicrosoft社とともに、WebLogic Serverを使用して作成されたWebサービスがMicrosoft Windows Communication Foundation (WCF)/.NET 3.0、3.5、および4.0 Frameworkを使用して作成されたWebサービスにアクセスしたり、それを消費したり、またその逆もできることを確認するための相互運用性のテストを実施しています。詳細は、http://msdn2.microsoft.com/en-us/netframework/default.aspx
を参照してください。
相互運用性テストは、次の表に示す領域に関し、JAX-WSおよびJAX-RPC Webサービスを使用して実施しました。
表3-1 実施した相互運用性テスト
領域 | 相互運用性ガイドライン |
---|---|
基本データ型と複合データ型 |
|
WS-I Basic Profile 2.0、1.2、および1.1 |
注意: WS-I Basic Profile 2.0および1.2は、JAX-WSにのみ適用されます。WS-I Basic Profile 1.1は、JAX-WSおよびJAX-RPC Webサービスの両方に適用されます。 |
Web Services Reliable Secure Profile (WS-RSP) 1.0 |
Web Services Reliable Secure Profileの相互運用性ガイドライン |
Web Services Security (WS-Security) 1.0および1.1 |
|
Web Services Security Policy (WS-SecurityPolicy) 1.2 |
|
Web Services Secure Conversation Language (WS-SecureConversation) 1.3 |
WS-SecureConversationの相互運用性ガイドライン |
Web Services Policy Framework (WS-Policy) 1.5 |
相互運用性の制約はありません。 |
Web Services Addressing (WS-Addressing) 0.9および1.0 |
なし |
MTOM (メッセージ転送最適化メカニズム) |
なし |
SAMLアサーション |
|
上記に加え、以下のような機能の組合せもテストしました。
MTOMとWS-Security
WS-ReliableMessagingおよびMTOM
WS-ReliableMessaging 1.2およびWS-Addressing 1.0 (JAX-WS)
WS-ReliableMessaging 1.1およびWS-Addressing 1.0 (JAX-WS)
WS-ReliableMessaging 1.1およびWS-Addressing 0.9、1.0 (JAX-RPC)
WS-ReliableMessaging 1.0およびWS-Addressing 0.9、1.0 (JAX-RPC)
WS-ReliableMessaging 1.2およびWS-SecureConversation 1.4
WS-ReliableMessaging 1.1およびWS-SecureConversation 1.3
WS-ReliableMessaging 1.0およびWS-SecureConversation 1.3
WS-Policy 1.5とWS-SecurityPolicy 1.2
以下の節では、テストにおいて特定された相互運用上の問題とガイドラインについて説明します。
Microsoft .NET 3.0/3.5でanyType
クラスを使用している場合、どのJavaデータ型が返されるかは保証されません。特定のJavaデータ型を戻す必要がある場合は、anyType
を使用しないようにしてください。
WS-I Basic Profile 1.2および2.0のプロファイルは、WebLogic WebサービスJAX-WSおよびMicrosoft .NET 4.0 Frameworkとの間でテストされました。相互運用性の制約はありませんでした。
WS-I Basic Profile 1.1は、WLS JAX-RPCおよびMicrosoft .NET 3.0/3.5 Frameworkとの間でテストされました。このテストによって、Microsoft .NET 3.0/3.5は、Sun Java Webサイトhttp://java.sun.com/webservices/reference/tutorials/wsit/doc/DataBinding7.html
で説明されている使用事例の文字列のBasic Profile 1.1セマンティクスを強制しないことが判明しました。
WebLogic WebサービスおよびMicrosoft .NET WebのWeb Services Reliable Secure Profile実装は、次の警告を表示しますが、互換性があります。
WS-ReliableMessagingセキュリティでは、WS-I Reliable Secure Profile Version 1.0 Working Group Draft仕様のガイドライン(http://www.ws-i.org/Profiles/ReliableSecureProfile-1.0.html
)に従い、WS-SecureConversationを使用する必要があります。
非同期の信頼できるメッセージングおよびWS-SecureConversationまたはWS-Trustは、WebLogic WebサービスJAX-WSクライアントおよびMicrosoft .NETサービスに対してのみサポートされます。JAX-RPCクライアントではサポートされません。
以下に、WS-Securityの相互運用性ガイドラインを示します。
<sp:Strict>
レイアウト・アサーション(下に表示)の使用は保証されません。
<sp:Layout> <wsp:Policy> <sp:Strict/> </wsp:Policy> </sp:Layout>
かわりに、次のように独自のポリシーを定義してください。
<sp:Layout> <wsp:Policy> <sp:Lax/> </wsp:Policy> </sp:Layout>
以下のアサーションは、Microsoft .NET 3.0/3.5ではサポートされません。
UsernameToken
でのダイジェスト・パスワード
<sp:EncryptedSupportingTokens>
要素レベルのシグネチャ
要素レベルの暗号化
WS-Security 1.1の非対称バインディングのサポートは、Microsoft .NET 3.0/3.5では保証されません。
このリリースでは、WebLogic ServerおよびMicrosoft .NET 3.5はWeb Services Security Policy (WS-SecurityPolicy) 1.2をサポートします。Microsoft .NET 3.0では、SecurityPolicy仕様の2005年12月のドラフト・バージョンがサポートされています。
2005年12月のドラフト・バージョンでは、<sp:SignedEncryptedSupportingTokens>
ポリシー・アサーションがサポートされていません。そのため、Microsoft .NET 3.0では、UsernameToken
を<sp:SignedSupportingTokens>
ポリシー・アサーションで暗号化します。UsernameToken
を暗号化せずに<sp:SignedSupportingTokens>
ポリシー・アサーションを使用する場合、WebLogic ServerとMicrosoft .NET Web Servicesは相互運用できません。
以下に、WS-SecureConversationの相互運用性ガイドラインを示します。
セキュリティ上の必要性がないかぎり、<sp:EncryptBeforeSigning/>
は使用しないことをお薦めします。かわりに、<sp:SignBeforeEncrypt>
(デフォルト)を使用してください。
WebLogic ServerのWebサービスではCookieモードの会話がサポートされますが、この機能はMicrosoft独自の実装であり、他のベンダーではサポートされない可能性があります。
<sp:BootstrapPolicy>
ポリシー・アサーションを使用する場合は、「WS-Securityの相互運用性ガイドライン」に定義されているガイドラインを考慮する必要があります。
WS-SecurityPolicy仕様またはWS-SecureConversation仕様で定義されているWS-SecureConversationの取消しおよび更新をサポートする標準メソッドはありません。Microsoft .NETでWS-SecureConversationの取消しおよび更新をサポートするために使用されているメソッドには、WebLogic Server 10.xとの互換性がありません。そのため、以下の設定が必要になります。
Microsoft .NETクライアントをWebLogic ServerのWebサービスと相互運用するには、サーバー側でsetCompatibilityPreference("msft")
メソッドを使用し、WebサービスのセキュリティMBean経由でCompatibility
フラグを設定する必要があります。
WebLogic ServerのWebサービス・クライアントを、Compatibility
フラグが設定されているWebLogic ServerのWebサービスと相互運用するには、次のようにクライアントでもこのフラグを設定する必要があります。
stub._setProperty(WLStub.POLICY_COMPATIBILITY_PREFERENCE,"msft");
たとえば、例3-1「JAX-WS Webサービス・クライアントでのMicrosoft .NET互換性フラグの設定」および例3-2「JAX-RPC Webサービス・クライアントでのMicrosoft .NET互換性フラグの設定」を参照してください。
SAMLアサーションが<wsee:Security>
ヘッダーの<ds:Signature>
要素の<ds:SignedInfo>
要素で参照される場合、Microsoft .NETでは、<wsse:SecurityTokenReference>
から参照されるSAMLアサーションをサポートしません。<wsse:SecurityTokenReference>の使用は、http://www.oasis-open.org/committees/download.php/16768/wss-v1.1-spec-os-SAMLTokenProfile.pdf
で説明されているWS-Security仕様でのベスト・プラクティスとして定義されます。
Microsoft .NETとの互換性を確保するには、Webサービス・クライアント・コードで、WLStub.POLICY_COMPATIBILITY_PREFERENCE
フラグをWLStub.POLICY_COMPATIBILITY_MSFT
フラグに設定する必要があります。フラグを設定すると、SAMLアサーションは、SecurityTokenReference
を使用せず、直接参照で署名されます。
次に、JAX-WS Webサービス・クライアントに対するMicrosoft .NET互換性フラグの設定方法の例を示します。
例3-1 JAX-WS Webサービス・クライアントでのMicrosoft .NET互換性フラグの設定
. . .
import weblogic.wsee.jaxrpc.WLStub;
. . .
public String test(String hello) throws Exception {
. . .
BindingProvider provider = (BindingProvider)port;
Map context = provider.getRequestContext();
. . .
. . .
context.put(WLStub.POLICY_COMPATIBILITY_PREFERENCE, WLStub.POLICY_COMPATIBILITY_MSFT);
try {
String result = port.getName(hello);
System.out.println("MSFT Result was: " + result);
return result;
} catch (Exception e) {
throw new RuntimeException (e);
}
}
次に、JAX-RPC Webサービス・クライアントに対するMicrosoft .NET互換性フラグの設定方法の例を示します。
例3-2 JAX-RPC Webサービス・クライアントでのMicrosoft .NET互換性フラグの設定
. . . . . . import weblogic.wsee.jaxrpc.WLStub; . . . @WebMethod() public String callSamlHelloSV_WSS10_MSFT(String input) { try { System.out.println("Calling sayHello(" + input + ") with MSFT Ways"); ((Stub)port)._setProperty(WLStub.POLICY_COMPATIBILITY_PREFERENCE, WLStub.POLICY_COMPATIBILITY_MSFT); String result = port.sayHelloSV_WSS10(input); System.out.println("MSFT Result was: " + result); return result; } catch (RemoteException e) { throw new RuntimeException(e); } }