5 Microsoft WCF/.NETとの相互運用性

Oracleでは、Oracle WebLogic ServerのWebLogic WebサービスがMicrosoft Windows Communication Foundation (WCF)/.NET 3.0、3.5、および4.0 Frameworkを使用して作成されたWebサービスにアクセスしたり、それを消費したり、またその逆もできることを確認するために、Microsoft社と協力して相互運用性テストを実施しています。

表5-1では、JAX-WSおよびJAX-RPC Webサービスを使用して実施した相互運用性テストを説明します。

表5-1 実施した相互運用性テスト

領域 相互運用性ガイドライン

基本データ型と複合データ型

基本データ型の相互運用性ガイドライン

WS-I Basic Profile 2.0、1.2、および1.1

Basic Profileの相互運用性ガイドライン

ノート: 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

WS-Securityの相互運用性ガイドライン

Web Services Security Policy (WS-SecurityPolicy) 1.2

WS-SecurityPolicyの相互運用性ガイドライン

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 WS-SecureConversationの相互運用性ガイドライン

Web Services Policy Framework (WS-Policy) 1.5

相互運用性の制約はありません。

Web Services Addressing (WS-Addressing) 0.9および1.0

なし

MTOM (メッセージ転送最適化メカニズム)

なし

SAMLアサーション

SignedInfoから参照する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");
      

    例については、例5-1および例5-2を参照してください。

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); 
     } 
}