プライマリ・コンテンツに移動
Oracle® Fusion Middleware Oracle Web Services Manager相互運用性ソリューション・ガイド
12c (12.2.1.1)
E79357-01
目次へ移動
目次

前
次

5 Microsoft WCF/.NET 3.5のセキュリティ環境との相互運用性

この章では、Microsoft WCF/.NET 3.5のセキュリティ環境とOracle Web Services Manager (OWSM)の相互運用性について説明します。

この章の内容は次のとおりです。

5.1 Microsoft WCF/.NET 3.5のセキュリティ環境の相互運用性の理解

オラクル社はMicrosoft社と協力して、OWSM 12cを使用して作成されたWebサービス・セキュリティ・ポリシーと、Microsoft Windows Communication Foundation (WCF)/.NET 3.5 Frameworkを使用して構成されたWebサービス・ポリシーとの相互運用を可能にするための相互運用性テストを実施しました。

Microsoft WCF/.NET 3.5 Frameworkの詳細は、http://msdn.microsoft.com/en-us/netframework/aa663324.aspxを参照してください。

OWSMの事前定義済ポリシーおよび相互運用性シナリオの詳細は、次の項で説明します。

5.1.1 Microsoft WCF/.NET 3.5のセキュリティ環境向けのOWSM事前定義済ポリシー

Microsoft WCF/.NET 3.5のセキュリティ環境向けのOWSM事前定義済ポリシーの詳細は、このトピックを確認してください。

詳細は、次を参照してください。

  • OWSM事前定義済ポリシーについては、『Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理』の事前定義済ポリシーに関する説明を参照してください。

  • OWSM 12cポリシーの構成およびアタッチについては、『Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理』のWebサービスの保護に関する説明およびポリシーのアタッチに関する説明を参照してください。

    注意:

    ほとんどの場合、アプリケーションのデプロイ前にソース・コード内のOWSMポリシーをアタッチすることも、WLSTまたはFusion Middleware Controlを使用してデプロイメント後にポリシーをアタッチすることもできます。この章の手順を簡略化するには、実行時にポリシーをアタッチしていることが前提です。デプロイ前にポリシーをアタッチすることが必要な状況の場合、その方法がこの手順で説明されています。

    注意:

    この章で説明する手順の一部では、Microsoft ServiceModelメタデータ・ユーティリティ・ツール(SvcUtil.exe)を使用して、デプロイされたWebサービスからクライアント・プロキシおよび構成ファイルを作成するよう指示します。ただし、SvcUtil.exeは、OWSMで使用される特定のセキュリティ・ポリシー・アサーションでは動作しません。回避策として、OWSMポリシーによって保護されているWebサービスのWCFプロキシを作成する際に、次のことを行います。

    • ポリシーをデタッチします。

    • SvcUtil.exeを使用してプロキシを作成します。

    • ポリシーを再アタッチします。

    SvcUtil.exeの詳細は、http://msdn.microsoft.com/en-us/library/aa347733%28v=vs.90%29.aspxを参照してください。

5.1.2 Microsoft WCF/.NET 3.5の相互運用性シナリオ

OWSM 12cとMicrosoft WCF/.NET 3.5との間の相互運用性には様々なシナリオがあります。

Microsoft .NET 3.5の最も一般的な相互運用性シナリオは、次のセキュリティ要件(認証、メッセージ保護およびトランスポート)に基づいています。

注意:

以降のシナリオでは、v3証明書付きのキーストアを使用していることを確認してください。JDK 1.5キーツールでは、デフォルトでv1証明書付きのキーストアが生成されます。

また、キーが適切な拡張(DigitalSignatureNon_repudiationKey_EnciphermentおよびData_Enciphermentなど)を使用していることも確認してください。

次の表に、OWSM 12cサービス・ポリシーとMicrosoft WCF/.NET 3.5クライアント・ポリシーの相互運用性シナリオを示します。


表5-1 OWSM 12cサービス・ポリシーとMicrosoft WCF/.NET 3.5クライアント・ポリシーの相互運用性

アイデンティティ・トークン WS-Securityバージョン メッセージ保護 トランスポート・セキュリティ サービス・ポリシー クライアント・ポリシー

MTOM

該当なし

該当なし

該当なし

oracle/wsmtom_policy

Microsoft WCF/.NET 3.5クライアントの構成(MTOM)

ユーザー名またはSAML

1.1

はい

いいえ

oracle/wss11_username_token_with_message_protection_service_policy

または

oracle/wss11_saml_or_username_token_with_message_protection_service_policy

Microsoft WCF/.NET 3.5クライアントの構成(メッセージ保護付きユーザー名トークン)

ユーザー名

1.0および1.1

いいえ

はい

oracle/wss_saml_or_username_token_over_ssl_service_policy

または

oracle/wss_username_token_over_ssl_service_policy

Microsoft WCF/.NET 3.5クライアントの構成(SSL経由のユーザー名トークン)

相互認証

1.1

はい

いいえ

oracle/wss11_x509_token_with_message_protection_service_policy

Microsoft WCF/.NET 3.5クライアントの構成(相互認証)

Kerberos

1.1

はい

いいえ

oracle/wss11_kerberos_token_with_message_protection_service_policy

Microsoft WCF/.NET 3.5クライアントの構成(メッセージ保護付きKerberos)


次の表に、Microsoft WCF/.NET 3.5サービス・ポリシーとOWSM 12cクライアント・ポリシーの相互運用性シナリオを示します。


表5-2 Microsoft WCF/.NET 3.5サービス・ポリシーとOWSM 12cクライアント・ポリシーの相互運用性

アイデンティティ・トークン WS-Securityバージョン メッセージ保護 トランスポート・セキュリティ サービス・ポリシー クライアント・ポリシー

MTOM

該当なし

該当なし

該当なし

Microsoft WCF/.NET 3.5 Webサービスの構成(MTOM)

oracle/wsmtom_policy

ユーザー名

1.1

はい

いいえ

Microsoft WCF/.NET 3.5 Webサービスの構成(メッセージ保護付きユーザー名トークン)

oracle/wss11_username_token_with_message_protection_client_policy

相互認証

1.1

はい

いいえ

Microsoft WCF/.NET 3.5 WebサービスおよびOWSM 12cクライアントの構成(相互認証)

oracle/wss11_x509_token_with_message_protection_client_policy


5.2 Microsoft WCF/.NET 3.5クライアント向けのメッセージ送信最適化メカニズムの実装

メッセージ送信最適化メカニズム(MTOM)を実装して、OWSM 12cサービス・ポリシーとMicrosoft WCF/.NET 3.5クライアント・ポリシーとの間の相互運用性およびMicrosoft WCF/.NET 3.5サービス・ポリシーとOWSM 12cクライアント・ポリシーとの間の相互運用性を実現できます。

次のトピックでは、様々な相互運用性シナリオにおいてMTOMを実装する方法について説明します。

5.2.1 OWSM 12c WebサービスおよびMicrosoft WCF/.NET 3.5クライアントの構成(メッセージ送信最適化メカニズム)

OWSM 12c WebサービスおよびMicrosoft WCF/.NET 3.5クライアントを使用してメッセージ送信最適化メカニズム(MTOM)を実装できます。

次のトピックでは、メッセージ送信最適化メカニズムを実装するために、OWSM 12c WebサービスおよびMicrosoft WCF/.NET 3.5クライアントを構成する方法を説明します。

5.2.1.1 OWSM 12c Webサービスの構成(MTOM)

OWSM 12cを使用してWebサービス・アプリケーションを作成し、作成したWebサービスにMTOMサービス・ポリシーをアタッチできます。

OWSM 12c Webサービスを構成するには、次のようにします。

  1. Webサービス・アプリケーションを作成してデプロイします。

  2. oracle/wsmtom_policyポリシーをWebサービスにアタッチします。

    詳細は、『Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理』のポリシーのアタッチに関する説明を参照してください。

5.2.1.2 Microsoft WCF/.NET 3.5クライアントの構成(MTOM)

Microsoft WCF/.NET 3.5 クライアントを構成して、OWSM 12c Webサービスとの相互運用性のためのメッセージ送信最適化メカニズムを実装できます。

Microsoft WCF/.NET 3.5クライアントを構成するには、次のようにします。

  1. Microsoft SvcUtilユーティリティを使用して、デプロイされたWebサービスからクライアント・プロキシおよび構成ファイルを作成します。

    MTOM相互運用性のサンプルは、app.configファイルを参照してください。

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
        <system.serviceModel>    
            <bindings>
                <customBinding>
                    <binding name="CustomBinding_IMTOMService">                
                        <mtomMessageEncoding maxReadPoolSize="64"
                         maxWritePoolSize="16"
                            messageVersion="Soap12" maxBufferSize="65536"
                            writeEncoding="utf-8">
                            <readerQuotas maxDepth="32" maxStringContentLength=
                             "8192" maxArrayLength="16384"
                                maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                        </mtomMessageEncoding>
                        <httpTransport manualAddressing="false" maxBufferPoolSize="524288"
                            maxReceivedMessageSize="65536" allowCookies="false"
                               authenticationScheme="Anonymous"
                            bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
                            keepAliveEnabled="true" maxBufferSize="65536"
                               proxyAuthenticationScheme="Anonymous"
                            realm="" transferMode="Buffered" 
                               unsafeConnectionNtlmAuthentication="false"
                            useDefaultWebProxy="true" />
                    </binding>
                </customBinding>
            </bindings>
            <client>
              <endpoint address="<endpoint_url>"
                  binding="customBinding" bindingConfiguration="CustomBinding_IMTOMService"
                  contract="IMTOMService" name="CustomBinding_IMTOMService" >
              </endpoint>         
            </client>          
        </system.serviceModel>
    </configuration>
    

    詳細は、http://msdn.microsoft.com/en-us/library/aa347733%28v=vs.90%29.aspxを参照してください。

  2. クライアント・プログラムを実行します。

5.2.2 Microsoft WCF/.NET 3.5 WebサービスおよびOWSM 12cクライアントの構成(メッセージ送信最適化メカニズム)

Microsoft WCF/.NET 3.5 WebサービスおよびOWSM 12cクライアントを使用してメッセージ送信最適化メカニズム(MTOM)を実装できます。

次のトピックでは、メッセージ送信最適化メカニズム(MTOM)を実装するために、Microsoft WCF/.NET 3.5 WebサービスおよびOWSM 12cクライアントを構成する方法を説明します。

5.2.2.1 Microsoft WCF/.NET 3.5 Webサービスの構成(MTOM)

Microsoft WCF/.NET 3.5 Webサービスを構成して、OWSM 12cクライアントとの相互運用性のためのメッセージ送信最適化メカニズムを実装できます。

Microsoft WCF/.NET 3.5 Webサービスを構成するには、次のようにします。

  1. .NET Webサービスを作成します。

    例については、次のMTOM相互運用性のための.NET Webサービスのサンプルを参照してください。

    static void Main(string[] args)
    {
        string uri = "http://host:port/TEST/MTOMService/SOA/MTOMService";
        // Step 1 of the address configuration procedure: Create a URI to serve as the base address.
        Uri baseAddress = new Uri(uri);
    
        // Step 2 of the hosting procedure: Create ServiceHost
        ServiceHost selfHost = new ServiceHost(typeof(MTOMService), baseAddress);
     
        try {
            HttpTransportBindingElement hb = new HttpTransportBindingElement();
            hb.ManualAddressing = false;
            hb.MaxBufferPoolSize = 2147483647;               
            hb.MaxReceivedMessageSize = 2147483647;
            hb.AllowCookies = false;
            hb.AuthenticationScheme = System.Net.AuthenticationSchemes.Anonymous;
            hb.KeepAliveEnabled = true;
            hb.MaxBufferSize = 2147483647;
            hb.ProxyAuthenticationScheme = System.Net.AuthenticationSchemes.Anonymous;
            hb.Realm = "";
            hb.TransferMode = System.ServiceModel.TransferMode.Buffered;
            hb.UnsafeConnectionNtlmAuthentication = false;
            hb.UseDefaultWebProxy = true;
            MtomMessageEncodingBindingElement me = new MtomMessageEncodingBindingElement();
            me.MaxReadPoolSize=64;
            me.MaxWritePoolSize=16;
            me.MessageVersion=System.ServiceModel.Channels.MessageVersion.Soap12;
            me.WriteEncoding = System.Text.Encoding.UTF8;
            me.MaxWritePoolSize = 2147483647;
            me.MaxBufferSize = 2147483647;
            me.ReaderQuotas.MaxArrayLength = 2147483647;
            CustomBinding binding1 = new CustomBinding();
            binding1.Elements.Add(me);
            binding1.Elements.Add(hb);
            ServiceEndpoint ep = selfHost.AddServiceEndpoint(typeof(IMTOMService), binding1, 
                   "MTOMService");
            EndpointAddress myEndpointAdd = new EndpointAddress(new Uri(uri),
            EndpointIdentity.CreateDnsIdentity("WSMCert3"));               
            ep.Address = myEndpointAdd;
    
            // Step 4 of the hosting procedure: Enable metadata exchange.
            ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
            smb.HttpGetEnabled = true;
            selfHost.Description.Behaviors.Add(smb);
            using (ServiceHost host = new ServiceHost(typeof(MTOMService)))
            {
                System.ServiceModel.Description.ServiceDescription svcDesc = 
                     selfHost.Description;
                ServiceDebugBehavior svcDebug = 
                      svcDesc.Behaviors.Find<ServiceDebugBehavior>();
                svcDebug.IncludeExceptionDetailInFaults = true;
            }
     
            // Step 5 of the hosting procedure: Start (and then stop) the service.
            selfHost.Open();
            Console.WriteLine("The service " + uri + " is ready.");
            Console.WriteLine("Press <ENTER> to terminate service.");
            Console.WriteLine();
            Console.ReadLine();
            // Close the ServiceHostBase to shutdown the service.
            selfHost.Close();
        }
        catch (CommunicationException ce)
        {
            Console.WriteLine("An exception occurred: {0}", ce.Message);
            selfHost.Abort();
        }
    }

    詳細は、http://msdn.microsoft.com/en-us/library/ms731835.aspxの『How to: Define a Windows Communication Foundation Service Contract』を参照してください。

  2. アプリケーションをデプロイします。

5.2.2.2 OWSM 12cクライアントの構成(MTOM)

OWSM 12cクライアントを構成して、Microsoft WCF/.NET 3.5 Webサービスとの相互運用性のためのメッセージ送信最適化メカニズムを実装できます。

OWSM 12cクライアントを構成するには、次のようにします。

  1. JDeveloperを使用して、.NET Webサービスを使用するSOAコンポジットを作成します。

    詳細は、SOA Suiteの開発者ガイドを参照してください。

  2. 次のポリシーをWebサービス・クライアントにアタッチします。

    oracle/wsmtom_policy

    詳細は、『Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理』のポリシーのアタッチに関する説明を参照してください。

5.3 Microsoft WCF/.NET 3.5クライアント向けのメッセージ保護付きユーザー名トークン(WS-Security 1.1)の実装

(セキュアな通信を有効化している、またはしていない)WS-Security 1.1標準に準拠したメッセージ保護付きユーザー名トークンを実装して、OWSM 12cサービス・ポリシーとMicrosoft WCF/.NET 3.5クライアント・ポリシーとの間の相互運用性およびMicrosoft WCF/.NET 3.5サービス・ポリシーとOWSM 12cクライアント・ポリシーとの間の相互運用性を実現できます。

次のトピックでは、様々な相互運用性シナリオにおいてメッセージ保護付きユーザー名トークンを実装する方法について説明します。

5.3.1 OWSM 12c WebサービスおよびMicrosoft WCF/.NET 3.5クライアントの構成(メッセージ保護付きユーザー名トークン)

OWSM 12c WebサービスおよびMicrosoft WCF/.NET 3.5クライアントを使用して、WS-Security 1.1標準に準拠したメッセージ保護付きユーザー名トークンを実装できます。

次のトピックでは、セキュアな通信を有効化する場合およびしない場合に、メッセージ保護付きユーザー名トークンを実装するために、OWSM 12c WebサービスおよびMicrosoft WCF/.NET 3.5クライアントを構成する方法を説明します。

5.3.1.1 Microsoft WCF/.NET 3.5クライアントのためのOWSM 12c Webサービスの構成(メッセージ保護付きユーザー名トークン)

OWSM 12c Webサービスを構成して、Microsoft WCF/.NET 3.5クライアントとの相互運用性のためのメッセージ保護付きユーザー名トークンを実装できます。

OWSM 12c Webサービスを構成するには、次のようにします。

  1. Webサービス・アプリケーションを作成します。

  2. セキュアな通信を有効化するかどうかに基づいて、使用するポリシーを選択します。

    セキュアな通信を有効化しない場合、次のいずれかのポリシーのクローンを作成します。

    oracle/wss11_username_token_with_message_protection_service_policy

    oracle/wss11_saml_or_username_token_with_message_protection_service_policy

    セキュアな通信を有効化するには、次のポリシーのクローンを作成します。

    oracle/wss11_username_token_with_message_protection_wssc_service_policy

    注意:

    セキュアな通信を有効化した場合、Microsoft WCF/.NET 3.5クライアントの構成(メッセージ保護付きユーザー名トークン)の説明に従って、多少異なる方法でapp.configファイルを構成する必要があります。

    詳細は、『Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理』のポリシーのアタッチに関する説明を参照してください。

  3. 次のコマンドを使用して、サービス側のキーストアからX.509証明書ファイルを.cerファイル(alice.cerなど)にエクスポートします。

    keytool -export -alias alice -file C:\alice.cer -keystore default-keystore.jks
    

5.3.1.2 Microsoft WCF/.NET 3.5クライアントの構成(メッセージ保護付きユーザー名トークン)

Microsoft WCF/.NET 3.5クライアントを構成して、OWSM 12c Webサービスとの相互運用性のためのメッセージ保護付きユーザー名トークンを実装できます。

Microsoft WCF/.NET 3.5クライアントを構成するには、次のようにします。

  1. 次のようにして、Microsoft Management Console (mmc)を使用して、(前にエクスポートした)証明書ファイルをクライアント・サーバー上のキーストアにインポートします。

    1. コマンド・プロンプトを開きます。

    2. mmcと入力して[Enter]を押します。

    3. 「File」→「Add/Remove snap-in」を選択します。

    4. 「Add and Choose Certificates」を選択します。

      注意:

      ローカル・マシン・ストア内の証明書を表示するためには、管理者ロールを持っている必要があります。

    5. 「Add」を選択します。

    6. 「My user account」→「finish」を選択します。

    7. 「OK」をクリックします。

    8. 「Console Root」→「Certificates -Current user」→「Personal」→「Certificates」の順に開きます。

    9. 「Certificates」を右クリックし、「All tasks」→「Import」を選択してCertificate importウィザードを起動します。

    10. 「Next」をクリックし、「Browse」を選択して、前にエクスポートした.cerファイルに移動します。

    11. 「Next」をクリックし、デフォルトを受け入れてウィザードを終了します。

    詳細は、http://msdn.microsoft.com/en-us/library/ms788967.aspxの『How to: View Certificates with the MMC Snap-in』を参照してください。

  2. WebサービスのWSDLを使用して、.NETクライアントを生成します。

    詳細は、http://msdn.microsoft.com/en-us/library/ms733133(v=vs.90).aspxの『How to: Create a Windows Communication Foundation Client』を参照してください。

  3. クライアント・プロジェクトのSolution Explorerで、「references」を右クリックして「Add reference」を選択し、C:\Windows\Microsoft.NET\ framework\v3.0\Windows Communication Foundation\System.Runtime.Serialization.dllを参照することにより、参照を追加します。

  4. 次のサンプルに示すように、.NETプロジェクトのapp.configファイルを編集して、証明書ファイルを更新し、リプレイを無効化します(変更部分は太字で示されています)。

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <system.serviceModel>
        <behaviors>
          <endpointBehaviors>
             <behavior name="secureBehaviour">
               <clientCredentials>
                 <serviceCertificate>
                   <defaultCertificate findValue="<certificate_cn>" 
                    storeLocation="CurrentUser" storeName="My" 
                    x509FindType="FindBySubjectName"/>
                 </serviceCertificate>
               </clientCredentials>
             </behavior>
          </endpointBehaviors>
        </behaviors>
      <bindings>
        <customBinding>
          <binding name="HelloWorldSoapHttp">
          <!-- To enable secrure conversation, use 
               authenticationMode="SecureConversation" 
               instead of the value for authenticationMode shown below -->
          <security 
            authenticationMode="UserNameOverTransport"
            defaultAlgorithmSuite="Basic128"
            requireDerivedKeys="false" 
            securityHeaderLayout="Lax" 
            includeTimestamp="true"
            keyEntropyMode="CombinedEntropy" 
            messageProtectionOrder="SignBeforeEncrypt"
            messageSecurityVersion="WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10"
            requireSignatureConfirmation="true">
            <localClientSettings 
              cacheCookies="true" 
              detectReplays="false"
              replayCacheSize="900000" 
              maxClockSkew="00:05:00"
              maxCookieCachingTime="Infinite"
              replayWindow="00:05:00" 
              sessionKeyRenewalInterval="10:00:00"
              sessionKeyRolloverInterval="00:05:00" 
              reconnectTransportOnFailure="true"
              timestampValidityDuration="00:05:00"
              cookieRenewalThresholdPercentage="60"/>
            <localServiceSettings detectReplays="true" issuedCookieLifetime="10:00:00"
              maxStatefulNegotiations="128" 
              replayCacheSize="900000"
              maxClockSkew="00:05:00"
              negotiationTimeout="00:01:00" replayWindow="00:05:00"
              inactivityTimeout="00:02:00"
              sessionKeyRenewalInterval="15:00:00"
              sessionKeyRolloverInterval="00:05:00"
              reconnectTransportOnFailure="true" maxPendingSessions="128"
              maxCachedCookies="1000" timestampValidityDuration="00:05:00" />
            <secureConversationBootstrap />
            <!-- 
            To enable secure conversation, add the following properties to 
            the <secureConversationBootstrap> element:
                 <secureConversationBootstrap 
                   authenticationMode="UserNameOverTransport" 
                   requireDerivedKeys="false" 
                   securityHeaderLayout="Lax" 
                   includeTimestamp="true"
                   keyEntropyMode="CombinedEntropy"
                   messageProtectionOrder="SignBeforeEncrypt"
                   messageSecurityVersion="WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10"
                   requireSignatureConfirmation="true"/> -->
             -->
          </security>
          <textMessageEncoding 
          maxReadPoolSize="64" 
          maxWritePoolSize="16"
          messageVersion="Soap11" 
          writeEncoding="utf-8">
            <readerQuotas 
             maxDepth="32" 
             maxStringContentLength="8192" 
             maxArrayLength="16384"
             maxBytesPerRead="4096" 
             maxNameTableCharCount="16384" />
         </textMessageEncoding>
         <HttpTransport 
          manualAddressing="false" 
          maxBufferPoolSize="524288"
          maxReceivedMessageSize="65536" 
          allowCookies="false" 
          authenticationScheme="Anonymous"
          bypassProxyOnLocal="false" 
          hostNameComparisonMode="StrongWildcard"
          keepAliveEnabled="true" 
          maxBufferSize="65536" 
          proxyAuthenticationScheme="Anonymous"
          realm="" 
          transferMode="Buffered" 
          unsafeConnectionNtlmAuthentication="false"
          useDefaultWebProxy="true" />
          </binding>
        </customBinding>
      </bindings>
        <client>
          <endpoint address="<endpoint_url>"
           binding="customBinding"
           bindingConfiguration="HelloWorldSoapHttp"
           contract="HelloWorld" 
           name="HelloWorldPort" 
           behaviorConfiguration="secureBehaviour" >
            <identity>
              <dns value="<certificate_cn>"/>
            </identity>
          </endpoint>
        </client>
      </system.serviceModel>
    </configuration>

    デフォルトのキー設定に従う場合は、<certificate_cn>aliceに設定する必要があります。

  5. セキュアな通信を有効化するまたはしないように、必要に応じてapp.configファイルを編集します。

    セキュアな通信を有効化しない場合、サンプルに示すように、app.configを編集します。

    • <security>要素のauthenticationModeプロパティをUserNameOverTransportに設定します。

    • secureConversationBootstrap要素のプロパティを構成しないでください。

    セキュアな通信を有効化するには、サンプルの太字斜体のコメントに示すように、app.configファイルを編集します。

    • <security>要素のauthenticationModeプロパティをSecureConversationに設定します。

    • 例に示すように、secureConversationBootstrap要素を追加プロパティとともに構成します。

  6. プロジェクトをコンパイルします。

  7. コマンド・プロンプトを開いて、プロジェクトのDebugフォルダに移動します。

  8. <client_project_name>.exeと入力して[Enter]を押します。

5.3.2 Microsoft WCF/.NET 3.5 WebサービスおよびOWSM 12cクライアントの構成(メッセージ保護付きユーザー名トークン)

Microsoft WCF/.NET 3.5 WebサービスおよびOWSM 12cクライアントを使用して、WS-Security 1.1標準に準拠したメッセージ保護付きユーザー名トークンを実装できます。

次のトピックでは、メッセージ保護付きユーザー名トークンを実装するために、Microsoft WCF/.NET 3.5 WebサービスおよびOWSM 12cクライアントを構成する方法を説明します。

5.3.2.1 Microsoft WCF/.NET 3.5 Webサービスの構成(メッセージ保護付きユーザー名トークン)

Microsoft WCF/.NET 3.5 Webサービスを構成して、OWSM 12cクライアントとの相互運用性のためのメッセージ保護付きユーザー名トークンを実装できます。

Microsoft WCF/.NET 3.5 Webサービスを構成するには、次のようにします。

  1. .NET Webサービスを作成します。

    必ず、SymmetricSecurityBindingElement使用してWebサービスのカスタム・バインディングを作成してください。

    例については、次の.NET Webサービスのサンプルを参照してください。

    static void Main(string[] args)
    {
        // Step 1 of the address configuration procedure: Create a URI to serve as the 
        // base address.        
        // Step 2 of the hosting procedure: Create ServiceHost
        string uri = "http://host:port/TEST/NetService";
        Uri baseAddress = new Uri(uri);
     
        ServiceHost selfHost = new ServiceHost(typeof(CalculatorService), baseAddress);
     
        try
        {
            SymmetricSecurityBindingElement sm = 
                SymmetricSecurityBindingElement.CreateUserNameForCertificateBindingElement();
            sm.DefaultAlgorithmSuite = System.ServiceModel.Security.SecurityAlgorithmSuite.Basic128;
            sm.SetKeyDerivation(false);
            sm.SecurityHeaderLayout = SecurityHeaderLayout.Lax;
            sm.IncludeTimestamp = true;
            sm.KeyEntropyMode = SecurityKeyEntropyMode.CombinedEntropy;
            sm.MessageProtectionOrder = MessageProtectionOrder.SignBeforeEncrypt;
            sm.MessageSecurityVersion = 
            MessageSecurityVersion.WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005
            WSSecurityPolicy11BasicSecurityProfile10;
            sm.RequireSignatureConfirmation = true;
            sm.LocalClientSettings.CacheCookies = true;
            sm.LocalClientSettings.DetectReplays = true;
            sm.LocalClientSettings.ReplayCacheSize = 900000;
            sm.LocalClientSettings.MaxClockSkew = new TimeSpan(00, 05, 00);
            sm.LocalClientSettings.MaxCookieCachingTime = TimeSpan.MaxValue;
            sm.LocalClientSettings.ReplayWindow = new TimeSpan(00, 05, 00); ;
            sm.LocalClientSettings.SessionKeyRenewalInterval = new TimeSpan(10, 00, 00);
            sm.LocalClientSettings.SessionKeyRolloverInterval = new TimeSpan(00, 05, 00); ;
            sm.LocalClientSettings.ReconnectTransportOnFailure = true;
            sm.LocalClientSettings.TimestampValidityDuration = new TimeSpan(00, 05, 00); ;
            sm.LocalClientSettings.CookieRenewalThresholdPercentage = 60;
            sm.LocalServiceSettings.DetectReplays = false;
            sm.LocalServiceSettings.IssuedCookieLifetime = new TimeSpan(10, 00, 00);
            sm.LocalServiceSettings.MaxStatefulNegotiations = 128;
            sm.LocalServiceSettings.ReplayCacheSize = 900000;
            sm.LocalServiceSettings.MaxClockSkew = new TimeSpan(00, 05, 00);
            sm.LocalServiceSettings.NegotiationTimeout = new TimeSpan(00, 01, 00);
            sm.LocalServiceSettings.ReplayWindow = new TimeSpan(00, 05, 00);
            sm.LocalServiceSettings.InactivityTimeout = new TimeSpan(00, 02, 00);
            sm.LocalServiceSettings.SessionKeyRenewalInterval = new TimeSpan(15, 00, 00);
            sm.LocalServiceSettings.SessionKeyRolloverInterval = new TimeSpan(00, 05, 00);
            sm.LocalServiceSettings.ReconnectTransportOnFailure = true;
            sm.LocalServiceSettings.MaxPendingSessions = 128;
            sm.LocalServiceSettings.MaxCachedCookies = 1000;
            sm.LocalServiceSettings.TimestampValidityDuration = new TimeSpan(15, 00, 00);
            HttpTransportBindingElement hb = new HttpTransportBindingElement();
            hb.ManualAddressing = false;
            hb.MaxBufferPoolSize = 524288;
            hb.MaxReceivedMessageSize = 65536;
            hb.AllowCookies = false;
            hb.AuthenticationScheme = System.Net.AuthenticationSchemes.Anonymous;
            hb.KeepAliveEnabled = true;
            hb.MaxBufferSize = 65536;
            hb.ProxyAuthenticationScheme = System.Net.AuthenticationSchemes.Anonymous;
            hb.Realm = "";
            hb.TransferMode = System.ServiceModel.TransferMode.Buffered;
            hb.UnsafeConnectionNtlmAuthentication = false;
            hb.UseDefaultWebProxy = true;
            TextMessageEncodingBindingElement tb1 = new TextMessageEncodingBindingElement();
            tb1.MaxReadPoolSize = 64;
            tb1.MaxWritePoolSize = 16;
            tb1.MessageVersion = System.ServiceModel.Channels.MessageVersion.Soap12;
            tb1.WriteEncoding = System.Text.Encoding.UTF8;
            CustomBinding binding1 = new CustomBinding(sm);
            binding1.Elements.Add(tb1);
            binding1.Elements.Add(hb);
            ServiceEndpoint ep = selfHost.AddServiceEndpoint(typeof(ICalculator), binding1,
              "CalculatorService");
     
            EndpointAddress myEndpointAdd = new EndpointAddress(                    
            new Uri(uri),
            EndpointIdentity.CreateDnsIdentity("WSMCert3"));
            ep.Address = myEndpointAdd;
     
            // Step 4 of the hosting procedure: Enable metadata exchange.
            ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
            smb.HttpGetEnabled = true;
            selfHost.Description.Behaviors.Add(smb);
            selfHost.Credentials.ServiceCertificate.SetCertificate(StoreLocation.CurrentUser, 
               StoreName.My,
            X509FindType.FindBySubjectName, "WSMCert3");
            selfHost.Credentials.ClientCertificate.Authentication.CertificateValidationMode =
                X509CertificateValidationMode.PeerOrChainTrust;
            selfHost.Credentials.UserNameAuthentication.UserNamePasswordValidationMode =
                UserNamePasswordValidationMode.Custom;
            CustomUserNameValidator cu = new CustomUserNameValidator();
            selfHost.Credentials.UserNameAuthentication.CustomUserNamePasswordValidator = cu;
            using (ServiceHost host = new ServiceHost(typeof(CalculatorService)))
            {
                System.ServiceModel.Description.ServiceDescription svcDesc = selfHost.Description;
                ServiceDebugBehavior svcDebug = svcDesc.Behaviors.Find<ServiceDebugBehavior>();
                svcDebug.IncludeExceptionDetailInFaults = true;
            }
     
            // Step 5 of the hosting procedure: Start (and then stop) the service.
            selfHost.Open();
            Console.WriteLine("The Calculator service is ready.");
            Console.WriteLine("Press <ENTER> to terminate service.");
            Console.WriteLine();
            Console.ReadLine();
            selfHost.Close();
        }
        catch (CommunicationException ce)
        {
             Console.WriteLine("An exception occurred: {0}", ce.Message);
             selfHost.Abort();
         }
    }
    

    詳細は、http://msdn.microsoft.com/en-us/library/ms731835.aspxの『How to: Define a Windows Communication Foundation Service Contract』を参照してください。

  2. 証明書ファイルを作成して、Webサービス・サーバー上のキーストアにインポートします。

    Microsoft Visual Studioを使用する場合、コマンドは次のようになります。

    makecert -r -pe -n "CN=wsmcert3" -sky exchange -ss my C:\wsmcert3.cer

    このコマンドにより、証明書が作成されてmmcにインポートされます。

    コマンドの結果が期待どおりにならない場合は、次のコマンド・シーケンスを試行してください。http://www.microsoft.com/whdc/devtools/WDK/default.mspxのWindows Developer Kit (WDK)をダウンロードする必要があります。

    makecert -r -pe -n "CN=wsmcert3" -sky exchange -ss my -sv wscert3.pvk C:\wsmcert3.cer
    pvk2pfx.exe -pvk wscert3.pvk -spc wsmcert3.cer -pfx PRF_WSMCert3.pfx -pi welcome1

    次に、PRF_WSMCert3.pfxをmmcにインポートします。

  3. keytoolコマンドを使用して、Webサービス・サーバー上に作成された証明書をクライアント・サーバーにインポートします。例:

    keytool -import -alias wsmcert3 -file C:\wsmcert3.cer -keystore <owsm_client_keystore>
    
  4. Solutions Explorerで「Web service Solution」プロジェクトを右クリックし、「Open Folder In Windows Explorer」をクリックします。

  5. bin/Debugフォルダに移動します。

  6. <project>.exeファイルをダブルクリックします。このコマンドにより、指定したURLでWebサービスが実行されます。

5.3.2.2 Microsoft WCF/.NET 3.5 WebサービスのためのOWSM 12cクライアントの構成(メッセージ保護付きユーザー名トークン)

OWSM 12cクライアントを構成して、Microsoft WCF/.NET 3.5 Webサービスとの相互運用性のためのメッセージ保護付きユーザー名トークンを実装できます。

OWSM 12cクライアントを構成するには、次のようにします。

  1. JDeveloperを使用して、.NET Webサービスを使用するSOAコンポジットを作成します。

    詳細は、SOA Suiteの開発者ガイドを参照してください。

  2. JDeveloperで、.NETサービスのWSDLを使用してパートナ・リンクを作成します。

  3. oracle/wss11_username_token_with_message_protection_client_policyポリシーをWebサービス・クライアントにアタッチします。

    詳細は、『Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理』のポリシーのアタッチに関する説明を参照してください。

  4. csf-keyおよびkeystore.recipient.aliasの構成を指定します。

    この情報を指定するには、ポリシーをアタッチするときにポリシー構成をオーバーライドします。

    必ず、ステップ1でインポートした証明書(wsmcert3)の別名としてkeystore.recipient.aliasを構成してください。例:

    <wsp:PolicyReference 
          URI="oracle/wss11_username_token_with_message_protection_client_policy"
          orawsp:category="security" 
          orawsp:status="enabled"/>
       <property 
          name="csf-key" 
          type="xs:string" 
          many="false">
          basic.credentials
       </property>
       <property 
          name="keystore.recipient.alias" 
          type="xs:string" 
          many="false">
          wsmcert3
       </property>

    詳細は、Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理のポリシー構成プロパティのオーバーライドに関する項を参照してください。

5.4 Microsoft WCF/.NET 3.5クライアント向けのSSL経由のユーザー名トークンの実装

(セキュアな通信を有効化している、またはしていない)SSL経由のユーザー名トークンを実装して、OWSM 12cサービス・ポリシーとMicrosoft WCF/.NET 3.5クライアント・ポリシーとの間の相互運用性を実現できます。

次のトピックでは、SSL経由のユーザー名トークンを実装するために、OWSM 12c WebサービスおよびMicrosoft WCF/.NET 3.5クライアントを構成する方法を説明します。

5.4.1 Microsoft WCF/.NET 3.5クライアントのためのOWSM 12c Webサービスの構成(SSL経由のユーザー名トークン)

Microsoft 3.5クライアントに対してOWSM 12c Webサービスを使用してSSL経由のユーザー名トークンを実装できます。

OWSM 12c Webサービスを構成するには、次のようにします。

  1. サーバーをSSL用に構成します。

    詳細は、『Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理』のトランスポート・レベルのセキュリティ(SSL)の構成に関する説明を参照してください。

  2. OWSM Webサービスを作成します。

  3. セキュアな通信を有効化するかどうかに基づいて、使用するポリシーを選択します。

    セキュアな通信を有効化しない場合、次のいずれかのポリシーを使用します。

    oracle/wss_username_token_over_ssl_service_policy

    oracle/wss_saml_or_username_token_over_ssl_service_policy

    セキュアな通信を有効化するには、次のポリシーを使用します。

    oracle/wss_username_token_over_ssl_wssc_service_policy

    注意:

    セキュアな通信を有効化した場合、Microsoft WCF/.NETクライアントの構成(SSL経由のユーザー名トークン)の説明に従って、多少異なる方法でapp.configファイルを構成する必要があります。

    詳細は、『Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理』のWebサービス・ポリシーのクローニングに関する説明を参照してください。

  4. 次のようにして、ポリシー設定を編集します。

    1. 「必要な作成時間」構成設定を無効化します。

    2. 「Nonceが必要」構成設定を無効化します。

    3. それ以外の構成設定はすべてデフォルトの構成設定のままにしておきます。

  5. ポリシーをアタッチします。

    詳細は、『Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理』のポリシーのアタッチに関する説明を参照してください。

5.4.2 Microsoft WCF/.NET 3.5クライアントの構成(SSL経由のユーザー名トークン)

Microsoft WCF/.NET 3.5クライアントを構成して、OWSM 12c Webサービスとの相互運用性のためのSSL経由のユーザー名トークンを実装できます。

Microsoft WCF/.NET 3.5クライアントを構成するには、次のようにします。

  1. WebサービスのWSDLを使用して、.NETクライアントを生成します。

    詳細は、http://msdn.microsoft.com/en-us/library/ms733133(v=vs.90).aspxの『How to: Create a Windows Communication Foundation Client』を参照してください。

  2. クライアント・プロジェクトのSolution Explorerで、「references」を右クリックして「Add reference」を選択し、C:\Windows\Microsoft.NET\framework\v3.0\Windows Communication Foundation\System.Runtime.Serialization.dllを参照することにより、参照を追加します。

  3. 次のサンプルに示すように、app.configを編集します。

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <system.serviceModel>
        <bindings>
          <customBinding>
            <binding name="BPELProcess1Binding">
              <!-- To enable secrure conversation, you must use 
              authenticationMode="SecureConversation" 
              instead of the value for authenticationMode shown below, under <security -->
              <security defaultAlgorithmSuite="Basic128" 
                authenticationMode="UserNameOverTransport"
                requireDerivedKeys="false" securityHeaderLayout="Lax" includeTimestamp="true"
                keyEntropyMode="CombinedEntropy" messageProtectionOrder="SignBeforeEncrypt"
                messageSecurityVersion="WSSecurity11WSTrustFebruary2005WSSecureConversation
                February2005WSSecurityPolicy11BasicSecurityProfile10"
                requireSignatureConfirmation="true">
                <localClientSettings cacheCookies="true" detectReplays="false"
                  replayCacheSize="900000" maxClockSkew="00:05:00" 
                  maxCookieCachingTime="Infinite"
                  replayWindow="00:05:00" sessionKeyRenewalInterval="10:00:00"
                  sessionKeyRolloverInterval="00:05:00" reconnectTransportOnFailure="true"
                  timestampValidityDuration="00:05:00" 
                  cookieRenewalThresholdPercentage="60"/>
                <localServiceSettings detectReplays="true" issuedCookieLifetime="10:00:00"
                  maxStatefulNegotiations="128" replayCacheSize="900000" 
                  maxClockSkew="00:05:00"
                  negotiationTimeout="00:01:00" replayWindow="00:05:00" 
                  inactivityTimeout="00:02:00"
                  sessionKeyRenewalInterval="15:00:00" 
                  sessionKeyRolloverInterval="00:05:00"
                  reconnectTransportOnFailure="true" maxPendingSessions="128"
                  maxCachedCookies="1000" timestampValidityDuration="00:05:00" />
                <secureConversationBootstrap />
                <!-- To enable secure conversation, add the following properties to 
                the <secureConversationBootstrap> element:
                <secureConversationBootstrap 
                  authenticationMode="UserNameOverTransport" 
                  requireDerivedKeys="false" 
                  securityHeaderLayout="Lax" 
                  includeTimestamp="true"
                  keyEntropyMode="CombinedEntropy"
                  messageProtectionOrder="SignBeforeEncrypt"
                  messageSecurityVersion="WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10"
                  requireSignatureConfirmation="true"/> -->
              </security>
                <textMessageEncoding 
                  maxReadPoolSize="64" 
                  maxWritePoolSize="16"
                  messageVersion="Soap11" 
                  writeEncoding="utf-8">
                    <readerQuotas 
                      maxDepth="32" 
                      maxStringContentLength="8192" 
                      maxArrayLength="16384"
                      maxBytesPerRead="4096" 
                      maxNameTableCharCount="16384" />
                  </textMessageEncoding>
                  <httpsTransport 
                    manualAddressing="false" 
                    maxBufferPoolSize="524288"
                    maxReceivedMessageSize="65536" 
                    allowCookies="false" 
                    authenticationScheme="Anonymous"
                    bypassProxyOnLocal="false" 
                    hostNameComparisonMode="StrongWildcard"
                    keepAliveEnabled="true" 
                    maxBufferSize="65536" 
                    proxyAuthenticationScheme="Anonymous"
                    realm="" 
                    transferMode="Buffered" 
                    unsafeConnectionNtlmAuthentication="false"
                    useDefaultWebProxy="true"  requireClientCertificate="false"/>
                  </binding>
                </customBinding>
              </bindings>
            <client>
                <endpoint 
                  address=" https://host:port/soa-infra/services/default/IO_NET6/bpelprocess1_client_ep"
                  binding="customBinding" bindingConfiguration="BPELProcess1Binding"
                  contract="BPELProcess1" name="BPELProcess1_pt" />
            </client>
      </system.serviceModel>
    </configuration>
  4. セキュアな通信を有効化するまたはしないように、必要に応じてapp.configファイルを編集します。

    セキュアな通信を有効化しない場合、サンプルの通常の書体で示すように、app.configを編集します。

    • <security>要素のauthenticationModeプロパティをUserNameOverTransportに設定します。

    • secureConversationBootstrap要素のプロパティを構成しないでください。

    セキュアな通信を有効化するには、サンプルの太字斜体のコメントに示すように、app.configを編集します。

    • <security>要素のauthenticationModeプロパティをSecureConversationに設定します。

    • 例に示すように、secureConversationBootstrap要素を追加プロパティとともに構成します。

  5. プロジェクトをコンパイルします。

  6. コマンド・プロンプトを開いて、プロジェクトのDebugフォルダに移動します。

  7. <client_project_name>.exeと入力して[Enter]を押します。

5.5 Microsoft WCF/.NET 3.5クライアント向けのメッセージ保護付き相互認証(WS-Security 1.1)の実装

WS-Security 1.1標準に準拠したメッセージ保護付き相互認証を実装して、OWSM 12cサービス・ポリシーとMicrosoft WCF/.NET 3.5クライアント・ポリシーとの間の相互運用性およびMicrosoft WCF/.NET 3.5サービス・ポリシーとOWSM 12cクライアント・ポリシーとの間の相互運用性を実現できます。

次のトピックでは、様々な相互運用性シナリオにおいてメッセージ保護付相互認証を実装する方法について説明します。

前述のいずれかのシナリオにおいてWebサービスおよびクライアントを構成する前に、相互運用性のための前提条件の構成(相互認証)の手順に従います。

5.5.1 相互運用性のための前提条件の構成(相互認証)

OWSM 12cとMicrosoft WCF/.NET 3.5との間の相互運用性のために、WS-Security 1.1標準に準拠したメッセージ保護付き相互認証を実装する前に、多くの高度なタスクを完了する必要があります。

相互運用性のための前提条件を構成するには、次のようにします。

  1. 次のコマンドを使用して、サービス側のキーストアからX.509証明書ファイルを.cerファイル(alice.cerなど)にエクスポートします。

    keytool -export -alias alice -file C:\alice.cer -keystore default-keystore.jks
    
  2. Microsoft Management Console (mmc)を使用して、(前にエクスポートした)証明書ファイルをクライアント・サーバー上のキーストアにインポートします。

    1. コマンド・プロンプトを開きます。

    2. mmcと入力して[Enter]を押します。

    3. 「File」→「Add/Remove snap-in」を選択します。

    4. 「Add and Choose Certificates」を選択します。

      注意:

      ローカル・マシン・ストア内の証明書を表示するためには、管理者ロールを持っている必要があります。

    5. 「Add」を選択します。

    6. 「My user account」→「finish」を選択します。

    7. 「OK」をクリックします。

    8. 「Console Root」→「Certificates -Current user」→「Personal」→「Certificates」の順に開きます。

    9. 「Certificates」を右クリックし、「All tasks」→「Import」を選択してCertificate importウィザードを起動します。

    10. 「Next」をクリックし、「Browse」を選択して、前にエクスポートした.cerファイルに移動します。

    11. 「Next」をクリックし、デフォルトを受け入れてウィザードを終了します。

    詳細は、http://msdn.microsoft.com/en-us/library/ms788967.aspxの『How to: View Certificates with the MMC Snap-in』を参照してください。

5.5.2 OWSM 12c WebサービスおよびMicrosoft WCF/.NET 3.5クライアントの構成(相互認証)

OWSM 12c WebサービスおよびMicrosoft WCF/.NET 3.5クライアントを使用して、WS-Security 1.1標準に準拠したメッセージ保護付き相互認証を実装できます。

次のトピックでは、メッセージ保護付き相互認証を実装するために、OWSM 12c WebサービスおよびMicrosoft WCF/.NET 3.5クライアントを構成する方法を説明します。

5.5.2.1 Microsoft WCF/.NET 3.5クライアントのためのOWSM 12c Webサービスの構成(相互認証)

OWSM 12c Webサービスを構成して、Microsoft WCF/.NET 3.5クライアントとの相互運用性のための相互認証を実装できます。

OWSM 12c Webサービスを構成するには、次のようにします。

  1. SOAコンポジットを作成してデプロイします。

  2. Fusion Middleware Controlを使用して、次のポリシーをWebサービスにアタッチします。

    oracle/wss11_x509_token_with_message_protection_service_policy

    詳細は、『Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理』のポリシーのアタッチに関する説明を参照してください。

5.5.2.2 Microsoft WCF/.NET 3.5クライアントの構成(相互認証)

Microsoft WCF/.NET 3.5クライアントを構成して、OWSM 12c Webサービスとの相互運用性のための相互認証を実装できます。

Microsoft WCF/.NET 3.5クライアントを構成するには、次のようにします。

  1. Microsoft SvcUtilユーティリティを使用して、デプロイされたWebサービスからクライアント・プロキシおよび構成ファイルを作成します。

    クライアント・プログラムのサンプルは次のとおりです。

     namespace IO_NET10_client
    {
        class Program
        {
            static void Main(string[] args)
            {
               
                BPELProcess1Client client = new BPELProcess1Client();
             
                client.ClientCredentials.ClientCertificate.SetCertificate(
                        StoreLocation.CurrentUser,
                        StoreName.My,
                        X509FindType.FindBySubjectName, "WSMCert3");
                         
                 client.ClientCredentials.ServiceCertificate.SetDefaultCertificate(
                           StoreLocation.CurrentUser,
                           StoreName.My,
                        X509FindType.FindBySubjectName, "Alice");
     
                process proc = new process();
                proc.input = "Test wss11_x509_token_with_message_protection_policy - ";
                Console.WriteLine(proc.input);
                processResponse response = client.process(proc);
               
                Console.WriteLine(response.result.ToString());
                Console.WriteLine("Press <ENTER> to terminate Client.");
                Console.ReadLine();
              }
        }
    }

    詳細は、http://msdn.microsoft.com/en-us/library/aa347733%28v=vs.90%29.aspxを参照してください

  2. クライアント・プロジェクトのSolution Explorerで、「references」を右クリックして「Add reference」を選択し、C:\Windows\Microsoft.NET\ framework\v3.0\Windows Communication Foundation\System.Runtime.Serialization.dllを参照することにより、参照を追加します。

  3. 次の手順を含むapp.config構成ファイルを作成します。

    次に示す手順は、例の太字の部分で呼び出されます。

    1. 資格証明を使用して動作を定義します。

    2. カスタム・バインディングを作成します。

    3. メッセージ・リプレイ検出を無効化します。

    4. エンドポイント動作を変更します。

    次のapp.configファイル・サンプルに、完全なファイルの例を示します。

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <system.serviceModel>
    
    
      <!-- 1. Define behaviors with credentials ------------------------------------------- -->
        <behaviors>
          <endpointBehaviors>
            <behavior name="secureBehaviour">
              <clientCredentials>
                <serviceCertificate>
                  <defaultCertificate findValue="<certificate_cn>"
                                      storeLocation="CurrentUser"
                                      storeName="My"
                                      x509FindType="FindBySubjectName"/>
                </serviceCertificate>
              </clientCredentials>
            </behavior>
          </endpointBehaviors>
        </behaviors>
      <!--  ------------------------------------------------------------------------------- -->
    
         <bindings>
           <customBinding>
             <binding name="BPELProcess1Binding">
    
    
      <!-- --- 2. Create a custom binding ------------------------------------------------- -->
               <security defaultAlgorithmSuite="Basic128" authenticationMode="MutualCertificate"
      <!--  ------------------------------------------------------------------------------- -->
    
                   requireDerivedKeys="false" securityHeaderLayout="Lax" includeTimestamp="true"
                   keyEntropyMode="CombinedEntropy" messageProtectionOrder="SignBeforeEncrypt"
                   messageSecurityVersion="WSSecurity11WSTrustFebruary2005WSSecureConversation
                   February2005WSSecurityPolicy11BasicSecurityProfile10"
                   requireSignatureConfirmation="true">
    
    
      <!-- --- 3. Disable the message replay detection -----------------------------------  -->
               <localClientSettings cacheCookies="true" detectReplays="false"
                        replayCacheSize="900000" maxClockSkew="00:05:00"
                        maxCookieCachingTime="Infinite"
      <!--  ------------------------------------------------------------------------------- -->
    
                        replayWindow="00:05:00" sessionKeyRenewalInterval="10:00:00"
                        sessionKeyRolloverInterval="00:05:00" reconnectTransportOnFailure="true"
                        timestampValidityDuration="00:05:00" cookieRenewalThresholdPercentage="60" />
                    <localServiceSettings detectReplays="true" 
                        issuedCookieLifetime="10:00:00"
                        maxStatefulNegotiations="128" 
                        replayCacheSize="900000" maxClockSkew="00:05:00"
                        negotiationTimeout="00:01:00" replayWindow="00:05:00"
                        inactivityTimeout="00:02:00"
                        sessionKeyRenewalInterval="15:00:00" sessionKeyRolloverInterval="00:05:00"
                        reconnectTransportOnFailure="true" maxPendingSessions="128"
                        maxCachedCookies="1000" timestampValidityDuration="00:05:00" />
                    <secureConversationBootstrap />
                  </security>
                  <textMessageEncoding maxReadPoolSize="64" maxWritePoolSize="16"
                      messageVersion="Soap11" writeEncoding="utf-8">
                    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                        maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                  </textMessageEncoding>
                  <httpTransport manualAddressing="false" maxBufferPoolSize="524288"
                      maxReceivedMessageSize="65536" allowCookies="false"
                      authenticationScheme="Anonymous"
                      bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
                      keepAliveEnabled="true" maxBufferSize="65536"
                      proxyAuthenticationScheme="Anonymous"
                      realm="" transferMode="Buffered" unsafeConnectionNtlmAuthentication="false"
                      useDefaultWebProxy="true" />
                </binding>
              </customBinding>
     
            </bindings>
            <client>
    
    
      <!--  - 4. Modify endpoint behavior ------------------------------------------------- -->
              <endpoint address="http://<server>:<port>//MyWebService1SoapHttpPort"
                    binding="customBinding" bindingConfiguration="MyWebService1SoapHttp"
                    contract="MyWebService1" 
                    name="MyWebService1SoapHttpPort"
                    behaviorConfiguration="secureBehaviour" >
                <identity>
                  <dns value="<certificate_cn>"/>
                </identity>
              </endpoint>
      <!--  ------------------------------------------------------------------------------- -->
    
            </client>
        </system.serviceModel>
    </configuration>
    
  4. プロジェクトをコンパイルします。

  5. コマンド・プロンプトを開いて、プロジェクトのDebugフォルダに移動します。

  6. <client_project_name>.exeと入力して[Enter]を押します。

5.5.3 Microsoft WCF/.NET 3.5 WebサービスおよびOWSM 12cクライアントの構成(相互認証)

Microsoft WCF/.NET 3.5 WebサービスおよびOWSM 12cクライアントを使用して、WS-Security 1.1標準に準拠した相互認証を実装できます。

Microsoft WCF/.NET 3.5 WebサービスおよびOWSM 12cクライアントを構成するには、次のようにします。

  1. .NET Webサービスを作成します。

    詳細は、http://msdn.microsoft.com/en-us/library/ms731835%28v=vs.90%29.aspxの『How to: Define a Windows Communication Foundation Service Contract』を参照してください

  2. SymmetricSecurityBindingElementを使用して、Webサービスのカスタム・バインディングを作成します。

    SymmetricSecurityBindingElementオブジェクトのサンプルを次に示します。

    SymmetricSecurityBindingElement sm =
    (SymmetricSecurityBindingElement)SecurityBindingElement.CreateMutualCertificate
    BindingElement(); 
     
    sm.DefaultAlgorithmSuite =
    System.ServiceModel.Security.SecurityAlgorithmSuite.Basic128;sm.SetKeyDerivati
    on(false);
    sm.SecurityHeaderLayout = SecurityHeaderLayout.Lax;sm.IncludeTimestamp =
    true;
    sm.KeyEntropyMode = SecurityKeyEntropyMode.CombinedEntropy; 
    sm.MessageProtectionOrder =
    MessageProtectionOrder.SignBeforeEncrypt;sm.MessageSecurityVersion =
    MessageSecurityVersion.WSSecurity11WSTrustFebruary2005WSSecureConversation
    February2005WSSecurityPolicy11BasicSecurityProfile10;
    sm.RequireSignatureConfirmation =
    true;
    

    詳細は、http://msdn.microsoft.com/en-us/library/ms730305(v=vs.90).aspxの『How to: Create a Custom Binding Using the SecurityBindingElement』を参照してください。

  3. アプリケーションをデプロイします。
  4. OWSM 12cクライアントを構成するには、JDeveloperを使用して、.NET Webサービスを使用するSOAコンポジットを作成します。

    詳細は、SOA Suiteの開発者ガイドを参照してください。

  5. JDeveloperで、.NETサービスのWSDLを使用してパートナ・リンクを作成し、次のようにインポートを追加します。
    <wsdl:import namespace="<namespace>" location="<WSDL location>"/> 
  6. Fusion Middleware Controlで、次のポリシーをWebサービス・クライアントにアタッチします。

    oracle/wss11_x509_token_with_message_protection_client_policy

    詳細は、『Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理』のポリシーのアタッチに関する説明を参照してください。

  7. keystore.recipient.aliasの構成を指定します。

    この情報を指定するには、ポリシーをアタッチするときにポリシー構成をオーバーライドします。

    必ず、ステップ4でインポートした証明書(wsmcert3)の別名としてkeystore.recipient.aliasを構成してください。

    詳細は、Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理のポリシー構成プロパティのオーバーライドに関する項を参照してください。

  8. クライアントからWebサービス・メソッドを起動します。

5.6 Microsoft WCF/.NET 3.5クライアント向けのメッセージ保護付きKerberosの実装

メッセージ保護付きKerberosを実装して、OWSM 12cサービス・ポリシーとMicrosoft WCF/.NET 3.5クライアント・ポリシーとの間の相互運用性を実現できます。

次のトピックでは、メッセージ保護付きKerberosを実装するために、OWSM 12c WebサービスおよびMicrosoft WCF/.NET 3.5クライアントを構成する方法を説明します。

5.6.1 相互運用性のための前提条件となるタスクの実行(メッセージ保護付きKerberos)

OWSM 12cとMicrosoft WCF/.NET 3.5との間の相互運用性のために、メッセージ保護付きKerberosを実装する前に、多くの高度なタスクを完了する必要があります。

相互運用性のための前提条件を構成するには、次のようにします。

  1. 鍵配布センター(KDC)およびアクティブ・ディレクトリ(AD)を構成します。

    詳細は、http://download.oracle.com/docs/cd/E19316-01/820-3746/gisdn/index.htmlのWindowsのアクティブ・ディレクトリおよびドメイン・コントローラの構成方法(ドメイン・コントローラがKDCの役割を果たします)に関する項を参照してください。

  2. 次のKerberos構成ファイルのサンプルに示すように、c:\winntにあるKerberos構成ファイルkrb5.confを設定します。
    [logging]
    default = c:\log\krb5libs.log
    kdc = c:\log\krb5kdc.log
    admin_server = c:\log\kadmind.log
    [libdefaults]
    default_realm = MYCOMPANY.LOCAL
    dns_lookup_realm = false
    dns_lookup_kdc = false
    default_tkt_enctypes = rc4-hmac
    default_tgs_enctypes = rc4-hmac
    permitted_enctypes = rc4-hmac
    kdc = hostname
    [realms]
    MYCOMPANY.LOCAL =
    { kdc = host:port  admin_server = host:port
      default_domain = <domainname>
    }
     [domain_realm]
    .<domainname> = MYCOMPANY.LOCAL
     <domainname> = MYCOMPANY.LOCAL
    [appdefaults]
    pam =
    {   debug = false  ticket_lifetime = 36000  renew_lifetime = 36000  forwardable =
     true  krb4_convert = false }

5.6.2 OWSM 12c WebサービスおよびMicrosoft WCF/.NET 3.5クライアントの構成(メッセージ保護付きKerberos)

OWSM 12c WebサービスおよびMicrosoft WCF/.NET 3.5クライアントを使用してメッセージ保護付きKerberosを実装できます。

次のトピックでは、メッセージ保護付きKerberosを実装するために、OWSM 12c WebサービスおよびMicrosoft WCF/.NET 3.5クライアントを構成する方法を説明します。

5.6.2.1 Microsoft WCF/.NET 3.5クライアントのためのOWSM 12c Webサービスの構成(メッセージ保護付きKerberos)

OWSM 12c Webサービスを構成して、Microsoft WCF/.NET 3.5クライアントとの相互運用性のためのメッセージ保護付きKerberosを実装できます。

OWSM 12c Webサービスを構成するには、次のようにします。

  1. Webサービス・アプリケーションを作成してデプロイします。

  2. oracle/wss11_kerberos_token_with_message_protection_service_policyポリシーのクローンを作成します。

    詳細は、『Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理』のWebサービス・ポリシーのクローニングに関する説明を参照してください。

  3. ポリシー設定を編集して、アルゴリズム・スイートをBasic128Rsa15に設定します。

  4. ポリシーをWebサービスにアタッチします。

    詳細は、『Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理』のポリシーのアタッチに関する説明を参照してください。

5.6.2.2 Microsoft WCF/.NET 3.5クライアントの構成(メッセージ保護付きKerberos)

Microsoft WCF/.NET 3.5クライアントを構成して、OWSM 12c Webサービスとの相互運用性のためのメッセージ保護付きKerberosを実装できます。

Microsoft WCF/.NET 3.5クライアントを構成するには、次のようにします。

  1. ADにユーザーを作成して、Webサービスがホストされるホストを指定します。デフォルトでは、ユーザー・アカウントはRC4-HMAC暗号を使用して作成されます。たとえば、ユーザー名付きのfoobarは、HTTP/foobarとなります。

  2. 次のようにktpassコマンドを使用して、KDCが実行されているWindowsのADマシンにkeytabファイルを作成します。

    ktpass -princ HTTP/foobar@MYCOMPANY.LOCAL -pass Oracle123 -mapuser foobar -out foobar.keytab -ptype KRB5_NT_PRINCIPAL -kvno 4

    HTTP/foobarは、ユーザー「foobar」にマッピングされるSPNです。「/desonly」を指定したり、「/cyrpto」に「des-cbc-crc」は指定しないでください。MYCOMPANY.LOCALはKDCのデフォルトのレルムで、krb5.iniファイルで使用可能です。passに指定するパスワードは、ユーザーの作成時のパスワードと一致している必要があります。

    FTPのバイナリ・モードを使用して、生成したキータブ・ファイルをSOAコンポジットWebサービスがホストされているマシンに移動します。

  3. 次のようにsetSpnコマンドを使用して、サービス・プリンシパルをユーザーにマッピングします。

    setSpn -A HTTP/foobar@MYCOMPANY.LOCAL foobar

    setSpn -L foobar

    ユーザーにマッピングするSPNは1つにしてください。複数のSPNがユーザーにマッピングされている場合は、setSpn -D <spname> <username>コマンドを使用して削除します。

  4. Microsoft SvcUtilユーティリティを使用して、デプロイされたWebサービスからクライアント・プロキシおよび構成ファイルを作成します。

    Windowsのエクスプローラでアプリケーションを右クリックして、generatedProxy.csファイルおよびapp.configファイルを追加し、既存の項目を追加を選択します。

    app.configのendpoint要素に、「HTTP/foobar@MYCOMPANY.LOCAL」というサービス・プリンシパル名(keytabの作成で使用したものと同じ値)の「identity」要素を追加します。

    <client>
            <endpoint address="http://host:port/HelloServicePort"
                binding="customBinding" bindingConfiguration="NewHelloSoap12HttpPortBinding"
                contract="NewHello" name="HelloServicePort">
            <identity>
              <servicePrincipalName value ="HTTP/foobar@MYCOMPANY.LOCAL"/>
            </identity>
            </endpoint>
           
          </client>

    次のカスタム・バインディングのサンプルを参照してください。

    <customBinding>
      <binding name="NewHelloSoap12HttpPortBinding">
          <!--Added by User: Begin-->
          <security defaultAlgorithmSuite="Basic128"
            authenticationMode="Kerberos"
            requireDerivedKeys="false" securityHeaderLayout="Lax"
            includeTimestamp="true"
            keyEntropyMode="CombinedEntropy"
            messageProtectionOrder="SignBeforeEncrypt"
            messageSecurityVersion="WSSecurity11WSTrustFebruary2005
            WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurity
              Profile10" 
            requireSignatureConfirmation="true">
          <localClientSettings cacheCookies="true" detectReplays="true"
              replayCacheSize="900000" maxClockSkew="00:05:00"
              maxCookieCachingTime="Infinite"
              replayWindow="00:05:00"
              sessionKeyRenewalInterval="10:00:00"
              sessionKeyRolloverInterval="00:05:00"
              reconnectTransportOnFailure="true"
              timestampValidityDuration="00:05:00"
              cookieRenewalThresholdPercentage="60" />
                    <localServiceSettings detectReplays="true"
              issuedCookieLifetime="10:00:00"
              maxStatefulNegotiations="128" replayCacheSize="900000"
              maxClockSkew="00:05:00"
              negotiationTimeout="00:01:00" replayWindow="00:05:00"
              inactivityTimeout="00:02:00"
              sessionKeyRenewalInterval="15:00:00"
              sessionKeyRolloverInterval="00:05:00"
              reconnectTransportOnFailure="true"
              maxPendingSessions="128"
              maxCachedCookies="1000"
              timestampValidityDuration="00:05:00" />
                      <secureConversationBootstrap />
                    </security>
                  <!--Added by User: End-->
                    <textMessageEncoding maxReadPoolSize="64"
                       maxWritePoolSize="16"
                       messageVersion="Soap12" writeEncoding="utf-8">
                    <readerQuotas maxDepth="32" maxStringContentLength="8192"
                       maxArrayLength="16384"
                       maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                    </textMessageEncoding>
                  <!--Added by User: Begin-->
                  <httpTransport manualAddressing="false"
                       maxBufferPoolSize="524288"
                       maxReceivedMessageSize="65536" allowCookies="false"
                       authenticationScheme="Anonymous"
                       bypassProxyOnLocal="false"
                       hostNameComparisonMode="StrongWildcard"
                       keepAliveEnabled="true" maxBufferSize="65536"
                       proxyAuthenticationScheme="Anonymous"
                       realm="" transferMode="Buffered"
                       unsafeConnectionNtlmAuthentication="false"
                       useDefaultWebProxy="true" />
                    <!--Added by User: End-->
               </binding>
    </customBinding>
    

    詳細は、http://msdn.microsoft.com/en-us/library/aa347733%28v=vs.90%29.aspxを参照してください。

  5. クライアント・プログラムを実行します。

5.7 Microsoft WCF/.NET 3.5クライアント向けの導出キーを使用したメッセージ保護付きKerberosの実装

導出キーを使用してメッセージ保護付きKerberosを実装して、OWSM 12cサービス・ポリシーとMicrosoft WCF/.NET 3.5クライアント・ポリシーとの間の相互運用性を実現できます。

次のトピックでは、OWSM 12c WebサービスおよびMicrosoft WCF/.NET 3.5クライアントを構成して、メッセージ保護付きKerberosを導出キーを使用して実装する方法を説明します。

5.7.1 相互運用性のための前提条件の構成(導出キーを使用したメッセージ保護付きKerberos)

OWSM 12cとMicrosoft WCF/.NET 3.5との間の相互運用性のために、メッセージ保護付きKerberosを導出キーを使用して実装する前に、多くの高度なタスクを完了する必要があります。

相互運用性のための前提条件を構成するには、次のようにします。

  1. 鍵配布センター(KDC)およびアクティブ・ディレクトリ(AD)を構成します。

    詳細は、以下のトピックを参照してください。

  2. 次のKerberos構成ファイルのサンプルに示すように、c:\winntにあるKerberos構成ファイルkrb5.confを設定します。
    [logging]
    default = c:\log\krb5libs.log
    kdc = c:\log\krb5kdc.log
    admin_server = c:\log\kadmind.log
    [libdefaults]
    default_realm = MYCOMPANY.LOCAL
    dns_lookup_realm = false
    dns_lookup_kdc = false
    default_tkt_enctypes = rc4-hmac
    default_tgs_enctypes = rc4-hmac
    permitted_enctypes = rc4-hmac
    kdc = hostname
    [realms]
    MYCOMPANY.LOCAL =
    { kdc = host:port  admin_server = host:port
      default_domain = <domainname>
    }
     [domain_realm]
    .<domainname> = MYCOMPANY.LOCAL
     <domainname> = MYCOMPANY.LOCAL
    [appdefaults]
    pam =
    {   debug = false  ticket_lifetime = 36000  renew_lifetime = 36000  forwardable =
     true  krb4_convert = false }

5.7.2 OWSM 12c WebサービスおよびMicrosoft WCF/.NET 3.5クライアントの構成(メッセージ保護付きKerberos)

OWSM 12c WebサービスおよびMicrosoft WCF/.NET 3.5クライアントを使用してメッセージ保護付きKerberosを実装できます。

OWSM 12c WebサービスおよびMicrosoft WCF/.NET 3.5クライアントを構成するには、次のようにします。

  1. Webサービス・アプリケーションを作成してデプロイします。
  2. wss11_kerberos_token_with_message_protection_basic128_service_policyポリシーのクローンを作成します。

    詳細は、『Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理』のWebサービス・ポリシーのクローニングに関する説明を参照してください。

  3. ポリシー設定を編集して、「Derived Keys」オプションを有効にします。
  4. ポリシーをWebサービスにアタッチします。

    詳細は、『Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理』のポリシーのアタッチに関する説明を参照してください。

  5. Microsoft WCF/.NET 3.5クライアントを構成するには、ADにユーザーを作成して、Webサービスがホストされるホストを指定します。デフォルトでは、ユーザー・アカウントはRC4-HMAC暗号を使用して作成されます。たとえば、ユーザー名をfoobarとすると、HTTP/foobarとなります。
  6. 次のようにktpassコマンドを使用して、KDCが実行されているWindowsのADマシンにkeytabファイルを作成します。

    ktpass -princ HTTP/foobar@MYCOMPANY.LOCAL -pass Oracle123 -mapuser foobar -out foobar.keytab -ptype KRB5_NT_PRINCIPAL -kvno 4

    HTTP/foobarがユーザー「foobar」にマッピングされるSPNです。「/desonly」を指定したり、「/cyrpto」に「des-cbc-crc」は指定しないでください。MYCOMPANY.LOCALはKDCのデフォルトのレルムで、krb5.iniファイルで使用可能です。passに指定するパスワードは、ユーザーの作成時のパスワードと一致している必要があります。

    FTPのバイナリ・モードを使用して、生成したキータブ・ファイルをSOAコンポジットWebサービスがホストされているマシンに移動します。

  7. 次のようにsetSpnコマンドを使用して、サービス・プリンシパルをユーザーにマッピングします。

    setSpn -A HTTP/foobar@MYCOMPANY.LOCAL foobar

    setSpn -L foobar

    ユーザーにマッピングするSPNは1つにしてください。複数のSPNがユーザーにマッピングされている場合は、setSpn -D <spname> <username>コマンドを使用して削除します。

  8. Microsoft SvcUtilユーティリティを使用して、デプロイされたWebサービスからクライアント・プロキシおよび構成ファイルを作成します。

    Windowsのエクスプローラでアプリケーションを右クリックして、generatedProxy.csファイルおよびapp.configファイルを追加し、既存の項目を追加を選択します。

    app.configのendpoint要素に、「HTTP/foobar@MYCOMPANY.LOCAL」というサービス・プリンシパル名(keytabの作成で使用したものと同じ値)の「identity」要素を追加します。

    <client>
            <endpoint address="http://host:port/HelloServicePort"
                binding="customBinding" bindingConfiguration="NewHelloSoap12HttpPortBinding"
                contract="NewHello" name="HelloServicePort">
            <identity>
              <servicePrincipalName value ="HTTP/foobar@MYCOMPANY.LOCAL"/>
            </identity>
            </endpoint>
           
          </client>

    次のカスタム・バインディングのサンプルを参照してください。

    <customBinding>
      <binding name="NewHelloSoap12HttpPortBinding">
        <!--Added by User: Begin-->
        <security defaultAlgorithmSuite="Basic128"
          authenticationMode="Kerberos"
          requireDerivedKeys="true" securityHeaderLayout="Lax"
          includeTimestamp="true"
          keyEntropyMode="CombinedEntropy"
          messageProtectionOrder="SignBeforeEncrypt"
          messageSecurityVersion="WSSecurity11WSTrustFebruary2005
          WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurity
          Profile10" 
          requireSignatureConfirmation="true">
        <localClientSettings cacheCookies="true" detectReplays="true"
            replayCacheSize="900000" maxClockSkew="00:05:00"
            maxCookieCachingTime="Infinite"
            replayWindow="00:05:00"
            sessionKeyRenewalInterval="10:00:00"
            sessionKeyRolloverInterval="00:05:00"
            reconnectTransportOnFailure="true"
            timestampValidityDuration="00:05:00"
            cookieRenewalThresholdPercentage="60" />
          <localServiceSettings detectReplays="true"
            issuedCookieLifetime="10:00:00"
            maxStatefulNegotiations="128" replayCacheSize="900000"
            maxClockSkew="00:05:00"
            negotiationTimeout="00:01:00" replayWindow="00:05:00"
            inactivityTimeout="00:02:00"
            sessionKeyRenewalInterval="15:00:00"
            sessionKeyRolloverInterval="00:05:00"
            reconnectTransportOnFailure="true"
            maxPendingSessions="128"
            maxCachedCookies="1000"
            timestampValidityDuration="00:05:00" />
          <secureConversationBootstrap />
        </security>
      <!--Added by User: End-->
          <textMessageEncoding maxReadPoolSize="64"
            maxWritePoolSize="16"
            messageVersion="Soap12" writeEncoding="utf-8">
              <readerQuotas maxDepth="32" maxStringContentLength="8192"
                maxArrayLength="16384"
                maxBytesPerRead="4096" maxNameTableCharCount="16384" />
          </textMessageEncoding>
              <!--Added by User: Begin-->
          <httpTransport manualAddressing="false"
            maxBufferPoolSize="524288"
            maxReceivedMessageSize="65536" allowCookies="false"
            authenticationScheme="Anonymous"
            bypassProxyOnLocal="false"
            hostNameComparisonMode="StrongWildcard"
            keepAliveEnabled="true" maxBufferSize="65536"
            proxyAuthenticationScheme="Anonymous"
            realm="" transferMode="Buffered"
            unsafeConnectionNtlmAuthentication="false"
            useDefaultWebProxy="true" />
          <!--Added by User: End-->
      </binding>
    </customBinding>
    
  9. クライアント・プログラムを実行します。

5.8 Microsoft WCF/.NET 3.5クライアント向けのSPNEGOネゴシエーションによるKerberosの実装

SPNEGOネゴシエーションによるKerberosを実装して、OWSM 12cサービス・ポリシーとMicrosoft WCF/.NET 3.5クライアント・ポリシーとの間の相互運用性を実現できます。

次のトピックでは、SPNEGOネゴシエーションによるKerberosを実装するために、OWSM 12c WebサービスおよびMicrosoft WCF/.NET 3.5クライアントを構成する方法を示します。

5.8.1 Microsoft WCF/.NET 3.5クライアントのためのOWSM 12c Webサービスの構成(SPNEGOネゴシエーションによるKerberos)

OWSM 12c Webサービスを構成して、Microsoft WCF/.NET 3.5クライアントとの相互運用性のためのSPNEGOネゴシエーションによるKerberosを実装できます。

OWSM 12c Webサービスを構成するには、次のようにします。

  1. Webサービス・アプリケーションを作成してデプロイします。

  2. http_spnego_token_service_templateアサーション・テンプレートを使用するポリシーを作成します。

    詳細は、『Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理』のSPNEGOネゴシエーションによるKerberosの構成に関する項を参照してください。

  3. ポリシーをWebサービスにアタッチします。

5.8.2 Microsoft WCF/.NET 3.5クライアントの構成(SPNEGOネゴシエーションによるKerberos)

Microsoft WCF/.NET 3.5クライアントを構成して、OWSM 12c Webサービスとの相互運用性のためのSPNEGOネゴシエーションによるKerberosを実装できます。

Microsoft WCF/.NET 3.5クライアントを構成するには、次のようにします。

  1. Microsoft SvcUtilユーティリティを使用して、デプロイされたWebサービスからクライアント・プロキシおよび構成ファイルを作成します。

    詳細は、http://msdn.microsoft.com/en-us/library/aa347733%28v=vs.90%29.aspxを参照してください。

  2. Windowsのエクスプローラでアプリケーションを右クリックして、generatedProxy.csファイルおよびapp.configファイルを追加し、既存の項目を追加を選択します。

  3. 次のサンプルに示すように、app.configファイルを編集します。

    <configuration>
      <system.serviceModel>
        <bindings>
          <basicHttpBinding>
            <binding name="BPELProcessBinding">
              <security mode= "TransportCredentialOnly">
                <transport clientCredentialType="Windows"/>
              </security>
            </binding>
          </basicHttpBinding>
        </bindings>
        <client>
          <endpoint 
              address="http://host:port/soa-infra/services/default/SOAProxy/bpelpro
    cess_client_ep"
              binding="basicHttpBinding" 
              bindingConfiguration="BPELProcessBinding"
              contract="BPELProcess" name="BPELProcess_pt" 
            <identity>
              <servicePrincipalName value ="HTTP/host:port@MYCOMPANY.LOCAL" />
            </identity>
          </endpoint>
        </client>
      </system.serviceModel>
    </configuration>
    

    このリストでは、エンドポイント要素のcontractおよびname属性の値は、generatedProxy.csファイルから取得されます。

  4. クライアントをコンパイルします。

  5. デプロイしたWebサービスにOWSMポリシーをアタッチした後、クライアントを実行します。

5.9 Microsoft WCF/.NET 3.5クライアント向けのSPNEGOネゴシエーションおよび資格証明の委任によるKerberosの実装

SPNEGOネゴシエーションおよび資格証明の委任によるKerberosを実装して、OWSM 12cサービス・ポリシーとMicrosoft WCF/.NET 3.5クライアント・ポリシーとの間の相互運用性を実現できます。

次のトピックでは、SPNEGOネゴシエーションおよび資格証明の委任によるKerberosを実装するために、OWSM 12c Webサービスおよび.NET 3.5クライアントを構成する方法を示します。

5.9.1 Microsoft WCF/.NET 3.5クライアントのためのOWSM 12c Webサービスの構成(SPNEGOおよび資格証明の委任によるKerberos)

OWSM 12c Webサービスを構成して、Microsoft WCF/.NET 3.5クライアントとの相互運用性のためのSPNEGOおよび資格証明の委任によるKerberosを実装できます。

OWSM 12c Webサービスを構成するには、次のようにします。

  1. Webサービス・アプリケーションを作成してデプロイします。

  2. http_spnego_token_service_templateアサーション・テンプレートを使用するポリシーを作成します。

    詳細は、『Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理』のSPNEGOネゴシエーションによるKerberosの構成に関する項を参照してください。

  3. ポリシーをWebサービスにアタッチします。

  4. credential.delegation構成設定の値をtrueに設定します。

    この情報を指定するには、ポリシーをアタッチするときにポリシー構成をオーバーライドします。

    詳細は、Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理のポリシー構成プロパティのオーバーライドに関する項を参照してください。

5.9.2 Microsoft WCF/.NET 3.5クライアントの構成(SPNEGOおよび資格証明の委任によるKerberos)

Microsoft WCF/.NET 3.5クライアントを構成して、OWSM 12c Webサービスとの相互運用性のためのSPNEGOおよび資格証明の委任によるKerberosを実装できます。

Microsoft WCF/.NET 3.5クライアントを構成するには、次のようにします。

  1. Microsoft SvcUtilユーティリティを使用して、デプロイされたWebサービスからクライアント・プロキシおよび構成ファイルを作成します。

    詳細は、http://msdn.microsoft.com/en-us/library/aa347733%28v=vs.90%29.aspxを参照してください。

  2. Windowsのエクスプローラでアプリケーションを右クリックして、generatedProxy.csファイルおよびapp.configファイルを追加し、既存の項目を追加を選択します。

  3. 次のapp.configファイル・サンプルに示すように、app.configファイルを編集します。

    <configuration>
      <system.serviceModel>
        <bindings>
          <basicHttpBinding>
            <binding name="BPELProcess1Binding">
              <security mode= "TransportCredentialOnly">
                <transport clientCredentialType="Windows"/>
              </security>
            </binding>
          </basicHttpBinding>
        </bindings>
        <client>
          <endpoint 
              address="http://host:port/soa-infra/services/default/SOAProxy/bpelpro
    cess1_client_ep"
              binding="basicHttpBinding" 
              bindingConfiguration="BPELProcess1Binding"
              contract="BPELProcess1" name="BPELProcess1_pt" 
              behaviorConfiguration="CredentialDelegation">
            <identity>
              <servicePrincipalName value ="HTTP/host:port@MYCOMPANY.LOCAL" />
            </identity>
          </endpoint>
        </client>
        <behaviors>
          <endpointBehaviors>
            <behavior name="CredentialDelegation">
              <clientCredentials>
                <windows allowedImpersonationLevel="Delegation"
                  allowNtlm="false"/>
              </clientCredentials>
            </behavior>
          </endpointBehaviors>
        </behaviors>
      </system.serviceModel>
    </configuration>
    

    例では、エンドポイント要素のcontractおよびname属性の値は、generatedProxy.csファイルから取得されます。

  4. クライアントをコンパイルします。

  5. デプロイしたWebサービスにOWSMポリシーをアタッチした後、クライアントを実行します。

5.10 Microsoft Active Directory Federation Services 2.0 (ADFS 2.0) STSを使用するWCF/.NET 3.5クライアント

一方向SSL経由のSAMLベアラー・トークンを利用するポリシーを使用して、Microsoft Active Directory Federation Services 2.0 (ADFS 2.0)セキュア・トークン・サービス(STS)を使用するWCF/.NET 3.5クライアントを保護できます。

注意:

SAML送信者保証トークンは、この使用例ではサポートされません。

この項で説明する手順は、ADFS 2.0をWindows Server 2008またはWindows Server 2008 R2システムにインストールして構成することを想定しています。このシステムはSTSロールで設定されます。

この項の内容は、次のとおりです。

5.10.1 Active Directory Federation Services (ADFS) 2.0のインストールおよび構成

Active Directory Federation Services (ADFS) 2.0をWindows Server 2008またはWindows Server R2システムにインストールして構成できます。

Active Directory Federation Services (ADFS) 2.0をインストールおよび構成するには、次のようにします。

  1. Active Directoryをインストールして構成します。

    詳細は、http://technet.microsoft.com/en-us/windowsserverを参照してください。

  2. ADFS 2.0をインストールして、ウィザードを使用して構成します。

    ウィザードを使用してADFS 2.0を構成するときは、必ず、「サーバーの役割」ページで、「フェデレーション サーバー」をクリックしてください。

    詳細は、http://technet.microsoft.com/en-us/windowsserver/dd448613を参照してください。

    ダウンロード情報は、http://go.microsoft.com/fwlink/?linkid=151338を参照してください。

  3. インターネット インフォメーション サービス (IIS) マネージャ・コンソールを使用して、IISで自己署名入りサーバー認証証明書を作成して構成し、デフォルトのWebサイトにバインドします。完了したら、SSLサーバー認証を有効にします。

    AD FS 2.0設定ウィザードが自動的にシステムのWebサーバー(IIS)サーバー・ロールにインストールされます。

    自己署名付きサーバー認証証明書の作成の概要は、http://technet.microsoft.com/en-us/library/cc771041%28v=ws.10%29.aspxに記載されています。この項の手順には、使用例固有の情報があります。

    1. インターネット インフォメーション サービス (IIS) マネージャ・コンソールを開きます。

    2. 「スタート」メニューで、「すべてのプログラム」→「管理ツール」→「インターネット インフォメーション サービス (IIS) マネージャ」をクリックします。

    3. コンソール・ツリーで、システムの名前を含むルート・ノードをクリックしてから、詳細ペインで、IISグループの「サーバー証明書」というアイコンをダブルクリックします。

    4. 「操作」ペインで、「自己署名入り証明書の作成」をクリックします。

    5. コンソール・ツリーで、「Default Web Site」をクリックします。

    6. 「操作」ペインで、「バインド」をクリックします。

    7. 「サイト バインド」ダイアログ・ボックスで「追加」をクリックします。

    8. 「サイト バインドの追加」ダイアログ・ボックスで、「種類」ドロップダウン・リストの「https」を選択します。「SSL 証明書」ドロップダウン・リストで作成した証明書を選択し、「OK」「閉じる」をクリックします。

    9. インターネット インフォメーション サービス (IIS) マネージャ・コンソールを閉じます。SSLサーバー認証を有効にします。

  4. スタンドアロン・フェデレーション・サーバーとしてシステムを構成します。

    詳細は、http://technet.microsoft.com/en-us/library/ee913579%28v=ws.10%29.aspxを参照してください。

  5. ADFS 2.0トークン署名証明書をエクスポートします。

    自己署名入り証明書の場合は、「DER encoded binary X.509 (.cer)」を選択します。

    署名証明書が自己署名入りでない場合は、「Cryptographic Message Syntax Standard – PKCS #7 証明書 (.P7B)」を選択し、「証明のパスにある証明書を可能であればすべて含む」を選択します。

    詳細は、http://technet.microsoft.com/en-us/library/dd378922%28v=ws.10%29.aspx#BKMK_4を参照してください。

  6. ユーザーを作成し、電子メール・アドレスを含めます。後でSTSを有効にして、サービス用の送信SAMLアサーションのサブジェクト名IDとして電子メール・アドレスを送信します。

    次の手順に従って、サンプル・ユーザーをActive Directoryに追加します。各ユーザーに電子メール・アドレスを設定してください。

    1. ドメイン管理者の資格証明を使用してシステムにログインします。

    2. 「スタート」「管理ツール」「Active Directoryユーザーとコンピュータ」をクリックします。

    3. コンソール・ツリーで、「Users」フォルダを右クリックします。「新規作成」「ユーザー」をクリックします。

    4. 「新しいオブジェクト - ユーザー」ページで、ユーザーを追加し、「次へ」をクリックします。

    5. パスワードを入力し、「ユーザーは次回ログオン時にパスワードの変更が必要」チェック・ボックスを選択解除し、「次へ」をクリックします。

    6. 「終了」をクリックします。

    7. 「Active Directoryユーザーとコンピュータ」の右端のペインで、新しいユーザー・オブジェクトを右クリックし、「プロパティ」をクリックします。

    8. 「全般」タブの「電子メール」ボックスに、ユーザーの電子メール・アドレスを入力し、「OK」をクリックします。

5.10.2 信頼できるSAMLトークン発行者としてのADFS 2.0 STSの構成

信頼できるSTSサーバーにSTS署名証明書を追加して、信頼できるSAMLトークン発行者としてADFS 2.0 STSを保護できます。

ADFS 2.0 STSによって発行されたSAMLアサーションを信頼するようにOWSMを構成するには、次のようにします。

  1. Active Directory Federation Services (ADFS) 2.0のインストールおよび構成でエクスポートしたSTS署名証明書を取得します。

    証明書チェーンの.p7bファイルの場合、IEでファイルを開き、各証明書を.cerファイルのチェーンにコピーします。

  2. keytoolを使用して証明書をデフォルトのキーストアの場所にインポートします。

    keytool –importcert –file <sts-signing-certs-file> –trustcacerts –alias <alias> –keystore default-keystore.jks

  3. http://domain-name/adfs/services/trustをSAMLの信頼できる発行者として追加します。

    詳細は、『Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理』のSAMLの信頼できる発行者およびDNリストの構成に関する項を参照してください。

  4. 信頼できるSTSサーバー・セクションにSTS証明書のサブジェクトDN (RFC 2253で定義)を追加します。CN=abcなど、RFC 2253に準拠する文字列を使用してください。keytoolなどの任意のメカニズムを使用して、証明書を表示し、サブジェクトDNを決定できます。

    詳細は、『Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理』のSAMLの信頼できる発行者およびDNリストの構成に関する項を参照してください。

5.10.3 Oracle Internet Directoryのユーザーの構成

各ユーザーに、ADFSに設定されるユーザー電子メール・アドレスと一致するメール属性を構成します。

Oracle Internet Directoryでのユーザーの構成の詳細は、『Oracle Internet Directory管理者ガイド』のユーザー作成のためのディレクトリ・エントリの管理を参照してください。

5.10.4 ポリシーのアタッチ

OWSMでは、Webサービスに直接アタッチできる多数のセキュリティ・ポリシーをサポートしています。

次のOWSMポリシーのいずれかをWebサービスにアタッチします。

  • oracle/wss_sts_issued_saml_bearer_token_over_ssl_service_policy

  • oracle/wss_saml_token_bearer_over_ssl_service_policy

  • oracle/wss11_saml_or_username_token_with_message_protection_service_policy

これらのポリシーは、メッセージ保護(整合性と機密保護)と、WS-Security SOAPヘッダーの、確認方法がベアラーのSAMLトークンに含まれる資格証明を使用する、SAMLベースの認証を実行します。また、トランスポート・プロトコルによりSSLメッセージ保護が提供されることも検証します。

ポリシーをアタッチする方法の詳細は、『Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理』のポリシーのアタッチに関する説明を参照してください。

5.10.5 ADFS 2.0のリライイング・パーティとしてのWebサービスの登録

電子メール・アドレスまたは名前ID (SAM-Account-Name)をサブジェクト名IDとして使用してWebサービスにSAMLアサーションを発行するようにADFS 2.0を構成できます。この項には、使用例固有の情報があります。

リライング・パーティの詳細は、http://technet.microsoft.com/en-us/library/dd807108%28v=ws.10%29.aspxを参照してください。

Webサービスをリライイング・パーティとして追加するには、次のようにします。

  1. ADFS 2.0管理コンソールで、ADFS 2.0をクリックします。
  2. 詳細ペインで、「証明書利用者信頼の追加」をクリックし、証明書利用者信頼の追加ウィザードを開始します。
  3. 「ようこそ」ページで、「開始」をクリックして開始します。
  4. 「証明書利用者についてのデータを手動で入力する」を選択します。
  5. 表示名を入力し、必要に応じてメモを入力します。
  6. ADFS 2.0プロファイルを選択します。
  7. 「証明書の構成」ページで、「次へ」をクリックします。

    このページでのトークン暗号化証明書の構成はオプションです。トークンを暗号化する必要がある場合は、このページで構成します。トークン暗号化証明書を構成しない場合、STSによって発行されるトークンはこのサービスで暗号化されません。

  8. WS-Trustは常に有効です。「次へ」をクリックします。
  9. 「証明書利用者信頼の識別子」に、サービスのURLを入力し、「追加」をクリックします。
  10. このリライイング・パーティへのアクセスをすべてのユーザーに許可します。
  11. 「次へ」「閉じる」をクリックします。

5.10.5.1 サービスの要求規則の構成

STSを有効にして、サービス用の送信SAMLアサーションのsubject name idとして電子メール・アドレスまたは名前IDを送信できます。この項には、使用例固有の情報があります。

要求規則の概要は、http://technet.microsoft.com/en-us/library/ee913578%28v=ws.10%29.aspxを参照してください。LDAP属性を要求として送信する規則を作成するには、http://technet.microsoft.com/en-us/library/dd807115%28v=ws.10%29.aspxを参照してください。

テンプレートの異なる2つの要求規則のチェーンを作成するには、次のようにします。

  1. サービスのリライイング・パーティを右クリックし、「要求規則の編集」を選択します。
  2. 発行変換規則タブで、規則の追加を選択します。
  3. 使用する要求規則テンプレートとして「LDAP 属性を要求として送信」を選択します。
  4. 要求に、Get LDAP Attributesなどの名前を付けます。
  5. 「属性ストア」をActive Directoryに、「LDAP属性」をE-Mail-Addressesに、「出力方向の要求の種類」をE-mail Addressに設定します。

    サブジェクト名IDとして、かわりに名前IDを使用する場合は、「LDAP属性」の下でSAM-Account-Nameを選択します。

  6. 「終了」を選択します。
  7. サブジェクト名IDとして名前IDを使用する場合は、「OK」をクリックして、プロパティ・ページを閉じ、リライイング・パーティの信頼への変更を保存します。

    サブジェクト名IDとして電子メール・アドレスを使用する場合は、引き続き、規則を追加します。

  8. 規則の追加を選択します。
  9. 使用する要求規則テンプレートとして「入力方向の要求の変換」を選択します。
  10. Email to Name IDなどの名前を付けます。
  11. 「入力方向の要求の種類」をE-mail Addressに設定します。(前の規則の「出力方向の要求の種類」と一致している必要があります。)
  12. 「出力方向の要求の種類」をName IDとし、「出力方向の名前 ID の形式」をEmailとして設定します(urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress)。
  13. すべての要求値をパス・スルーし、「完了」をクリックします。
  14. 「OK」をクリックして、プロパティ・ページを閉じ、リライイング・パーティの信頼への変更を保存します。

5.10.6 ADFS 2.0を使用するWCF/.NET 3.5クライアントの保護

WCF/.NET 3.5クライアントを保護するため、複数のセキュリティおよび認証メカニズムを実装できます。

ADFS 2.0を使用してWCF/.NET 3.5クライアントを保護するには、次のようにします。

  1. .NET 3.5およびMicrosoft Visual Studio 2008をインストールします。

  2. STSおよびサービス用のSSLサーバー証明書をWindowsにインポートします。

    STSまたはサービス用のSSLサーバー証明書が、信頼できるCAから発行されていない、または自己署名入りである場合は、Microsoft WCF/.NET 3.5クライアントの構成(メッセージ保護付きユーザー名トークン)の説明に従って、MMCツールを使用してインポートする必要があります。

  3. WCFクライアントを作成して構成します。

    ADFS 2.0 STSにより、トークンに対する保険としての複数のセキュリティおよび認証メカニズムがサポートされます。これらはそれぞれ個別のエンドポイントとして公開されます。ユーザー名/パスワード認証では、2つのエンドポイントが提供されます。

    • http://<adfs.domain>/adfs/services/trust/13/username - このエンドポイントはメッセージ保護付きユーザー名トークン用です。

    • https://<adfs.domain>/adfs/services/trust/13/usernamemixed - このエンドポイントはトランスポート保護(SSL)付きユーザー名トークン用です。

    WCFクライアントは、SSLのユーザー名トークン用のhttps://<adfs.domain>/adfs/services/trust/13/usernamemixedエンドポイントを使用して、サービスのSAMLベアラー・トークンを取得します。

    1. サービスWSDLを使用して、WCFクライアントを生成します。

      Windows Communication Foundationクライアントの作成の詳細は、http://msdn.microsoft.com/en-us/library/ms733133(v=vs.90)を参照してください。

    2. クライアントをws2007FederationHttpBindingで構成します。

      クライアント・プロジェクトのSolution Explorerで、「references」を右クリックして「Add reference」を選択し、C:\Windows\Microsoft.NET\framework\v3.0\Windows Communication Foundation\System.Runtime.Serialization.dllを参照することにより、参照を追加します。

      app.configファイルを編集します。(WS 2007フェデレーションHTTPバインディングの詳細は、http://msdn.microsoft.com/en-us/library/bb472490.aspxを参照してください。)次のサンプルを考えてみます。

      <?xml version="1.0" encoding="utf-8"?>
      <configuration>
          <system.serviceModel>
              <behaviors>
                <endpointBehaviors>
                  <behavior name="secureBehaviour">
                    <clientCredentials>
                      <serviceCertificate>
             <defaultCertificate findValue="weblogic"  
                  storeLocation="LocalMachine" 
                  storeName="My" 
                  x509FindType="FindBySubjectName"/>
                      </serviceCertificate>
                    </clientCredentials>
                  </behavior>
                </endpointBehaviors>
              </behaviors>
            <bindings>
              <ws2007FederationHttpBinding>
                <binding name="JaxWsWss11SamlOrUsernameOrSamlBearerOverSSLSoapHttp">
                  <security mode="TransportWithMessageCredential">
                    <message negotiateServiceCredential="false"
                   algorithmSuite="Basic128"
                         issuedTokenType ="http://docs.oasis-open.org/wss/oasis-wss-saml-token-
       
      profile-1.1#SAMLV1.1"
                         issuedKeyType="BearerKey">
                      <issuer address ="https://domain-name/adfs/services/trust/13/usernamemixed"
                    binding ="ws2007HttpBinding" 
       
      bindingConfiguration="ADFSUsernameMixed"/>
                    </message>
                  </security>
                </binding>
              </ws2007FederationHttpBinding>
              <ws2007HttpBinding>
                <binding name="ADFSUsernameMixed">
                  <security mode="TransportWithMessageCredential">
                    <message clientCredentialType="UserName" establishSecurityContext="false" />
                  </security>
                </binding>
              </ws2007HttpBinding>
            </bindings>
              <client>
                <endpoint 
       
      address="https://adc2170989:8002/JaxWsWss11SamlOrUsernameOrSamlBearerOverSSL/JaxWsWss11Sam
       
       
      lOrUsernameOrSamlBearerOverSSLService"
                    binding="ws2007FederationHttpBinding" 
       
      bindingConfiguration="JaxWsWss11SamlOrUsernameOrSamlBearerOverSSLSoapHttp"
                    contract="JaxWsWss11SamlOrUsernameOrSamlBearerOverSSL" 
       
       
      name="JaxWsWss11SamlOrUsernameOrSamlBearerOverSSLPort">
                  <identity>
                    <dns value="weblogic" />
                  </identity>
                </endpoint>
            </client>
          </system.serviceModel>
      </configuration>
    3. program.csファイルを編集し、サービスの呼出しを行います。

      まだ存在していない場合は、プロジェクトに.csファイルを作成し、program.csという名前(または任意の名前)を付けます。次と一致するように編集します。

      using System;
      using System.Collections.Generic;
      using System.Linq;
      using System.Text;
      using System.ServiceModel;
       
      namespace Client
      {
          class Program
          {
              static void Main(string[] args)
              {
                  JaxWsWss11SamlOrUsernameOrSamlBearerOverSSLClient client = 
                     New JaxWsWss11SamlOrUsernameOrSamlBearerOverSSLClient();
       
                  client.ClientCredentials.UserName.UserName = "joe";
                  client.ClientCredentials.UserName.Password = "eoj";
       
                        
       
       
      System.Net.ServicePointManager.ServerCertificateValidationCallback =
                     ((sender, certificate, chain, sslPolicyErrors) => true);
                  
       
                  Console.WriteLine(client.echo("Hello"));
                  Console.Read();
              }
       
          }
      }

      このサンプルprogram.csファイルの場合:

      joeはユーザー名、eojはパスワードであり、STSに対して認証するためにクライアントによって使用されます。

      System.Net.ServicePointManager.ServerCertificateValidationCallback = ((sender, certificate, chain, sslPolicyErrors) => true);は、サーバー側の自己署名入り証明書を検証するために追加されています。サーバー証明書が信頼できるCAから発行されている場合、これは不要です。テスト用に自己署名入り証明書を使用している場合、この方法を追加してクライアント側の証明書を検証します。