5 Microsoft WCF/.NETとの相互運用性
表5-1では、JAX-WSおよびJAX-RPC Webサービスを使用して実施した相互運用性テストを説明します。
表5-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 Security (WS-Security) 1.0および1.1 |
|
Web Services Security Policy (WS-SecurityPolicy) 1.2 |
|
Web Services Secure Conversation Language (WS-SecureConversation) 1.3 |
<a href="weblogic-web-service-inter.html#GUID-613A2111-3111-48CB-AEFC-732D04AF983D" title='Use the interoperability guidelines for WS-SecureConversation, such as usage of |
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
を使用しないようにしてください。
Basic Profileの相互運用性ガイドライン
WS-I Basic Profileをテストするには、Basic Profileの相互運用性ガイドラインに従います。
WS-I Basic Profile 1.2および2.0のプロファイルは、WebLogic WebサービスJAX-WSおよびMicrosoft .NET Framework 4.0との間でテストされました。相互運用性の制約はありませんでした。
WS-I Basic Profile 1.1は、WLS JAX-RPCおよびMicrosoft .NET 3.0/3.5 Frameworkとの間でテストされました。このテストによって、Microsoft .NET 3.0/3.5は、Java Webサイトhttp://download.oracle.com/docs/cd/E17802_01/webservices/webservices/reference/tutorials/wsit/doc/DataBinding7.html
で説明されている使用事例の文字列のBasic Profile 1.1セマンティクスを強制しないことが判明しました。
Web Services Reliable Secure Profileの相互運用性ガイドライン
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の相互運用性ガイドライン
WebLogic Serverでは、セキュリティ・ポリシーの定義、Microsoft .NET 3.0/3.5ガイドラインなど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では保証されません。
WS-SecurityPolicyの相互運用性ガイドライン
WebLogic Serverでは、準拠するWS-SecurityPolicy相互運用性ガイドラインが提供されています。
このリリースでは、WebLogic ServerおよびMicrosoft .NET 3.5はWeb Services Security Policy (WS-SecurityPolicy) 1.3をサポートします。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:SignBeforeEncrypt>
、setCompatibilityPreference("msft")
メソッドなど、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");
-
SignedInfoから参照するSAMLアサーションの使用
SAMLアサーションが<wsee:Security>
ヘッダーの<ds:Signature>
要素の<ds:SignedInfo>
要素で参照される場合、Microsoft .NETでは、<wsse:SecurityTokenReference>
から参照されるSAMLアサーションをサポートしません。<wsse:SecurityTokenReference>の使用は、WS-Security仕様のベスト・プラクティスとして定義されています。
http://www.oasis-open.org/committees/download.php/16768/wss-v1.1-spec-os-SAMLTokenProfile.pdf
を参照してください。
Microsoft .NETとの互換性を確保するには、Webサービス・クライアント・コードで、WLStub.POLICY_COMPATIBILITY_PREFERENCE
フラグをWLStub.POLICY_COMPATIBILITY_MSFT
フラグに設定する必要があります。フラグを設定すると、SAMLアサーションは、SecurityTokenReference
を使用せず、直接参照で署名されます。
次に、JAX-WS Webサービス・クライアントに対するMicrosoft .NET互換性フラグの設定方法の例を示します。
次に、JAX-RPC Webサービス・クライアントに対するMicrosoft .NET互換性フラグの設定方法の例を示します。
例5-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);
}
}
例5-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); } }