Oracle® Fusion Middleware Oracle Web Services Manager相互運用性ソリューション・ガイド 12c (12.2.1.1) E79357-01 |
|
![]() 前 |
![]() 次 |
この章の内容は次のとおりです。
Microsoft WCF/.NET 3.5クライアント向けのメッセージ保護付きユーザー名トークン(WS-Security 1.1)の実装
Microsoft WCF/.NET 3.5クライアント向けのメッセージ保護付き相互認証(WS-Security 1.1)の実装
Microsoft WCF/.NET 3.5クライアント向けの導出キーを使用したメッセージ保護付きKerberosの実装
Microsoft WCF/.NET 3.5クライアント向けのSPNEGOネゴシエーションおよび資格証明の委任によるKerberosの実装
Microsoft Active Directory Federation Services 2.0 (ADFS 2.0) STSを使用する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の事前定義済ポリシーおよび相互運用性シナリオの詳細は、次の項で説明します。
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
を参照してください。
OWSM 12cとMicrosoft WCF/.NET 3.5との間の相互運用性には様々なシナリオがあります。
Microsoft .NET 3.5の最も一般的な相互運用性シナリオは、次のセキュリティ要件(認証、メッセージ保護およびトランスポート)に基づいています。
注意:
以降のシナリオでは、v3証明書付きのキーストアを使用していることを確認してください。JDK 1.5キーツールでは、デフォルトでv1証明書付きのキーストアが生成されます。
また、キーが適切な拡張(DigitalSignature
、Non_repudiation
、Key_Encipherment
およびData_Encipherment
など)を使用していることも確認してください。
次の表に、OWSM 12cサービス・ポリシーとMicrosoft WCF/.NET 3.5クライアント・ポリシーの相互運用性シナリオを示します。
表5-1 OWSM 12cサービス・ポリシーとMicrosoft WCF/.NET 3.5クライアント・ポリシーの相互運用性
アイデンティティ・トークン | WS-Securityバージョン | メッセージ保護 | トランスポート・セキュリティ | サービス・ポリシー | クライアント・ポリシー |
---|---|---|---|---|---|
MTOM |
該当なし |
該当なし |
該当なし |
|
|
ユーザー名またはSAML |
1.1 |
はい |
いいえ |
または
|
|
ユーザー名 |
1.0および1.1 |
いいえ |
はい |
または
|
|
相互認証 |
1.1 |
はい |
いいえ |
|
|
Kerberos |
1.1 |
はい |
いいえ |
|
次の表に、Microsoft WCF/.NET 3.5サービス・ポリシーとOWSM 12cクライアント・ポリシーの相互運用性シナリオを示します。
表5-2 Microsoft WCF/.NET 3.5サービス・ポリシーとOWSM 12cクライアント・ポリシーの相互運用性
アイデンティティ・トークン | WS-Securityバージョン | メッセージ保護 | トランスポート・セキュリティ | サービス・ポリシー | クライアント・ポリシー |
---|---|---|---|---|---|
MTOM |
該当なし |
該当なし |
該当なし |
|
|
ユーザー名 |
1.1 |
はい |
いいえ |
|
|
相互認証 |
1.1 |
はい |
いいえ |
|
メッセージ送信最適化メカニズム(MTOM)を実装して、OWSM 12cサービス・ポリシーとMicrosoft WCF/.NET 3.5クライアント・ポリシーとの間の相互運用性およびMicrosoft WCF/.NET 3.5サービス・ポリシーとOWSM 12cクライアント・ポリシーとの間の相互運用性を実現できます。
次のトピックでは、様々な相互運用性シナリオにおいてMTOMを実装する方法について説明します。
OWSM 12c WebサービスおよびMicrosoft WCF/.NET 3.5クライアントを使用してメッセージ送信最適化メカニズム(MTOM)を実装できます。
次のトピックでは、メッセージ送信最適化メカニズムを実装するために、OWSM 12c WebサービスおよびMicrosoft WCF/.NET 3.5クライアントを構成する方法を説明します。
OWSM 12cを使用してWebサービス・アプリケーションを作成し、作成したWebサービスにMTOMサービス・ポリシーをアタッチできます。
OWSM 12c Webサービスを構成するには、次のようにします。
Webサービス・アプリケーションを作成してデプロイします。
oracle/wsmtom_policy
ポリシーをWebサービスにアタッチします。
詳細は、『Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理』のポリシーのアタッチに関する説明を参照してください。
Microsoft WCF/.NET 3.5 クライアントを構成して、OWSM 12c Webサービスとの相互運用性のためのメッセージ送信最適化メカニズムを実装できます。
Microsoft WCF/.NET 3.5クライアントを構成するには、次のようにします。
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
を参照してください。
クライアント・プログラムを実行します。
Microsoft WCF/.NET 3.5 WebサービスおよびOWSM 12cクライアントを使用してメッセージ送信最適化メカニズム(MTOM)を実装できます。
次のトピックでは、メッセージ送信最適化メカニズム(MTOM)を実装するために、Microsoft WCF/.NET 3.5 WebサービスおよびOWSM 12cクライアントを構成する方法を説明します。
Microsoft WCF/.NET 3.5 Webサービスを構成して、OWSM 12cクライアントとの相互運用性のためのメッセージ送信最適化メカニズムを実装できます。
Microsoft WCF/.NET 3.5 Webサービスを構成するには、次のようにします。
.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』を参照してください。
アプリケーションをデプロイします。
OWSM 12cクライアントを構成して、Microsoft WCF/.NET 3.5 Webサービスとの相互運用性のためのメッセージ送信最適化メカニズムを実装できます。
OWSM 12cクライアントを構成するには、次のようにします。
JDeveloperを使用して、.NET Webサービスを使用するSOAコンポジットを作成します。
詳細は、SOA Suiteの開発者ガイドを参照してください。
次のポリシーをWebサービス・クライアントにアタッチします。
oracle/wsmtom_policy
詳細は、『Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理』のポリシーのアタッチに関する説明を参照してください。
(セキュアな通信を有効化している、またはしていない)WS-Security 1.1標準に準拠したメッセージ保護付きユーザー名トークンを実装して、OWSM 12cサービス・ポリシーとMicrosoft WCF/.NET 3.5クライアント・ポリシーとの間の相互運用性およびMicrosoft WCF/.NET 3.5サービス・ポリシーとOWSM 12cクライアント・ポリシーとの間の相互運用性を実現できます。
次のトピックでは、様々な相互運用性シナリオにおいてメッセージ保護付きユーザー名トークンを実装する方法について説明します。
OWSM 12c WebサービスおよびMicrosoft WCF/.NET 3.5クライアントを使用して、WS-Security 1.1標準に準拠したメッセージ保護付きユーザー名トークンを実装できます。
次のトピックでは、セキュアな通信を有効化する場合およびしない場合に、メッセージ保護付きユーザー名トークンを実装するために、OWSM 12c WebサービスおよびMicrosoft WCF/.NET 3.5クライアントを構成する方法を説明します。
OWSM 12c Webサービスを構成して、Microsoft WCF/.NET 3.5クライアントとの相互運用性のためのメッセージ保護付きユーザー名トークンを実装できます。
OWSM 12c Webサービスを構成するには、次のようにします。
Webサービス・アプリケーションを作成します。
セキュアな通信を有効化するかどうかに基づいて、使用するポリシーを選択します。
セキュアな通信を有効化しない場合、次のいずれかのポリシーのクローンを作成します。
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サービスの保護とポリシーの管理』のポリシーのアタッチに関する説明を参照してください。
次のコマンドを使用して、サービス側のキーストアからX.509証明書ファイルを.cer
ファイル(alice.cer
など)にエクスポートします。
keytool -export -alias alice -file C:\alice.cer -keystore default-keystore.jks
Microsoft WCF/.NET 3.5クライアントを構成して、OWSM 12c Webサービスとの相互運用性のためのメッセージ保護付きユーザー名トークンを実装できます。
Microsoft WCF/.NET 3.5クライアントを構成するには、次のようにします。
次のようにして、Microsoft Management Console (mmc)を使用して、(前にエクスポートした)証明書ファイルをクライアント・サーバー上のキーストアにインポートします。
コマンド・プロンプトを開きます。
mmcと入力して[Enter]を押します。
「File」→「Add/Remove snap-in」を選択します。
「Add and Choose Certificates」を選択します。
注意:
ローカル・マシン・ストア内の証明書を表示するためには、管理者ロールを持っている必要があります。
「Add」を選択します。
「My user account」→「finish」を選択します。
「OK」をクリックします。
「Console Root」→「Certificates -Current user」→「Personal」→「Certificates」の順に開きます。
「Certificates」を右クリックし、「All tasks」→「Import」を選択してCertificate importウィザードを起動します。
「Next」をクリックし、「Browse」を選択して、前にエクスポートした.cer
ファイルに移動します。
「Next」をクリックし、デフォルトを受け入れてウィザードを終了します。
詳細は、http://msdn.microsoft.com/en-us/library/ms788967.aspx
の『How to: View Certificates with the MMC Snap-in』を参照してください。
WebサービスのWSDLを使用して、.NETクライアントを生成します。
詳細は、http://msdn.microsoft.com/en-us/library/ms733133(v=vs.90).aspx
の『How to: Create a Windows Communication Foundation Client』を参照してください。
クライアント・プロジェクトのSolution Explorerで、「references」を右クリックして「Add reference」を選択し、C:\Windows\Microsoft.NET\ framework\v3.0\Windows Communication Foundation\System.Runtime.Serialization.dll
を参照することにより、参照を追加します。
次のサンプルに示すように、.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
に設定する必要があります。
セキュアな通信を有効化するまたはしないように、必要に応じてapp.config
ファイルを編集します。
セキュアな通信を有効化しない場合、サンプルに示すように、app.config
を編集します。
<security>
要素のauthenticationMode
プロパティをUserNameOverTransport
に設定します。
secureConversationBootstrap
要素のプロパティを構成しないでください。
セキュアな通信を有効化するには、サンプルの太字斜体のコメントに示すように、app.config
ファイルを編集します。
<security>
要素のauthenticationMode
プロパティをSecureConversation
に設定します。
例に示すように、secureConversationBootstrap
要素を追加プロパティとともに構成します。
プロジェクトをコンパイルします。
コマンド・プロンプトを開いて、プロジェクトのDebugフォルダに移動します。
<client_project_name>.exe
と入力して[Enter]を押します。
Microsoft WCF/.NET 3.5 WebサービスおよびOWSM 12cクライアントを使用して、WS-Security 1.1標準に準拠したメッセージ保護付きユーザー名トークンを実装できます。
次のトピックでは、メッセージ保護付きユーザー名トークンを実装するために、Microsoft WCF/.NET 3.5 WebサービスおよびOWSM 12cクライアントを構成する方法を説明します。
Microsoft WCF/.NET 3.5 Webサービスを構成して、OWSM 12cクライアントとの相互運用性のためのメッセージ保護付きユーザー名トークンを実装できます。
Microsoft WCF/.NET 3.5 Webサービスを構成するには、次のようにします。
.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』を参照してください。
証明書ファイルを作成して、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にインポートします。
keytool
コマンドを使用して、Webサービス・サーバー上に作成された証明書をクライアント・サーバーにインポートします。例:
keytool -import -alias wsmcert3 -file C:\wsmcert3.cer -keystore <owsm_client_keystore>
Solutions Explorerで「Web service Solution」プロジェクトを右クリックし、「Open Folder In Windows Explorer」をクリックします。
bin/Debug
フォルダに移動します。
<project>.exe
ファイルをダブルクリックします。このコマンドにより、指定したURLでWebサービスが実行されます。
OWSM 12cクライアントを構成して、Microsoft WCF/.NET 3.5 Webサービスとの相互運用性のためのメッセージ保護付きユーザー名トークンを実装できます。
OWSM 12cクライアントを構成するには、次のようにします。
JDeveloperを使用して、.NET Webサービスを使用するSOAコンポジットを作成します。
詳細は、SOA Suiteの開発者ガイドを参照してください。
JDeveloperで、.NETサービスのWSDLを使用してパートナ・リンクを作成します。
oracle/wss11_username_token_with_message_protection_client_policy
ポリシーをWebサービス・クライアントにアタッチします。
詳細は、『Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理』のポリシーのアタッチに関する説明を参照してください。
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サービスの保護とポリシーの管理のポリシー構成プロパティのオーバーライドに関する項を参照してください。
(セキュアな通信を有効化している、またはしていない)SSL経由のユーザー名トークンを実装して、OWSM 12cサービス・ポリシーとMicrosoft WCF/.NET 3.5クライアント・ポリシーとの間の相互運用性を実現できます。
次のトピックでは、SSL経由のユーザー名トークンを実装するために、OWSM 12c WebサービスおよびMicrosoft WCF/.NET 3.5クライアントを構成する方法を説明します。
Microsoft 3.5クライアントに対してOWSM 12c Webサービスを使用してSSL経由のユーザー名トークンを実装できます。
OWSM 12c Webサービスを構成するには、次のようにします。
サーバーをSSL用に構成します。
詳細は、『Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理』のトランスポート・レベルのセキュリティ(SSL)の構成に関する説明を参照してください。
OWSM Webサービスを作成します。
セキュアな通信を有効化するかどうかに基づいて、使用するポリシーを選択します。
セキュアな通信を有効化しない場合、次のいずれかのポリシーを使用します。
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サービス・ポリシーのクローニングに関する説明を参照してください。
次のようにして、ポリシー設定を編集します。
「必要な作成時間」構成設定を無効化します。
「Nonceが必要」構成設定を無効化します。
それ以外の構成設定はすべてデフォルトの構成設定のままにしておきます。
ポリシーをアタッチします。
詳細は、『Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理』のポリシーのアタッチに関する説明を参照してください。
Microsoft WCF/.NET 3.5クライアントを構成して、OWSM 12c Webサービスとの相互運用性のためのSSL経由のユーザー名トークンを実装できます。
Microsoft WCF/.NET 3.5クライアントを構成するには、次のようにします。
WebサービスのWSDLを使用して、.NETクライアントを生成します。
詳細は、http://msdn.microsoft.com/en-us/library/ms733133(v=vs.90).aspx
の『How to: Create a Windows Communication Foundation Client』を参照してください。
クライアント・プロジェクトのSolution Explorerで、「references」を右クリックして「Add reference」を選択し、C:\Windows\Microsoft.NET\framework\v3.0\Windows Communication Foundation\System.Runtime.Serialization.dll
を参照することにより、参照を追加します。
次のサンプルに示すように、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>
セキュアな通信を有効化するまたはしないように、必要に応じてapp.config
ファイルを編集します。
セキュアな通信を有効化しない場合、サンプルの通常の書体で示すように、app.config
を編集します。
<security>
要素のauthenticationMode
プロパティをUserNameOverTransport
に設定します。
secureConversationBootstrap
要素のプロパティを構成しないでください。
セキュアな通信を有効化するには、サンプルの太字斜体のコメントに示すように、app.config
を編集します。
<security>
要素のauthenticationMode
プロパティをSecureConversation
に設定します。
例に示すように、secureConversationBootstrap
要素を追加プロパティとともに構成します。
プロジェクトをコンパイルします。
コマンド・プロンプトを開いて、プロジェクトのDebugフォルダに移動します。
<client_project_name>.exe
と入力して[Enter]を押します。
WS-Security 1.1標準に準拠したメッセージ保護付き相互認証を実装して、OWSM 12cサービス・ポリシーとMicrosoft WCF/.NET 3.5クライアント・ポリシーとの間の相互運用性およびMicrosoft WCF/.NET 3.5サービス・ポリシーとOWSM 12cクライアント・ポリシーとの間の相互運用性を実現できます。
次のトピックでは、様々な相互運用性シナリオにおいてメッセージ保護付相互認証を実装する方法について説明します。
前述のいずれかのシナリオにおいてWebサービスおよびクライアントを構成する前に、相互運用性のための前提条件の構成(相互認証)の手順に従います。
OWSM 12cとMicrosoft WCF/.NET 3.5との間の相互運用性のために、WS-Security 1.1標準に準拠したメッセージ保護付き相互認証を実装する前に、多くの高度なタスクを完了する必要があります。
相互運用性のための前提条件を構成するには、次のようにします。
次のコマンドを使用して、サービス側のキーストアからX.509証明書ファイルを.cer
ファイル(alice.cer
など)にエクスポートします。
keytool -export -alias alice -file C:\alice.cer -keystore default-keystore.jks
Microsoft Management Console (mmc)を使用して、(前にエクスポートした)証明書ファイルをクライアント・サーバー上のキーストアにインポートします。
コマンド・プロンプトを開きます。
mmcと入力して[Enter]を押します。
「File」→「Add/Remove snap-in」を選択します。
「Add and Choose Certificates」を選択します。
注意:
ローカル・マシン・ストア内の証明書を表示するためには、管理者ロールを持っている必要があります。
「Add」を選択します。
「My user account」→「finish」を選択します。
「OK」をクリックします。
「Console Root」→「Certificates -Current user」→「Personal」→「Certificates」の順に開きます。
「Certificates」を右クリックし、「All tasks」→「Import」を選択してCertificate importウィザードを起動します。
「Next」をクリックし、「Browse」を選択して、前にエクスポートした.cer
ファイルに移動します。
「Next」をクリックし、デフォルトを受け入れてウィザードを終了します。
詳細は、http://msdn.microsoft.com/en-us/library/ms788967.aspx
の『How to: View Certificates with the MMC Snap-in』を参照してください。
OWSM 12c WebサービスおよびMicrosoft WCF/.NET 3.5クライアントを使用して、WS-Security 1.1標準に準拠したメッセージ保護付き相互認証を実装できます。
次のトピックでは、メッセージ保護付き相互認証を実装するために、OWSM 12c WebサービスおよびMicrosoft WCF/.NET 3.5クライアントを構成する方法を説明します。
OWSM 12c Webサービスを構成して、Microsoft WCF/.NET 3.5クライアントとの相互運用性のための相互認証を実装できます。
OWSM 12c Webサービスを構成するには、次のようにします。
SOAコンポジットを作成してデプロイします。
Fusion Middleware Controlを使用して、次のポリシーをWebサービスにアタッチします。
oracle/wss11_x509_token_with_message_protection_service_policy
詳細は、『Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理』のポリシーのアタッチに関する説明を参照してください。
Microsoft WCF/.NET 3.5クライアントを構成して、OWSM 12c Webサービスとの相互運用性のための相互認証を実装できます。
Microsoft WCF/.NET 3.5クライアントを構成するには、次のようにします。
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
を参照してください
クライアント・プロジェクトのSolution Explorerで、「references」を右クリックして「Add reference」を選択し、C:\Windows\Microsoft.NET\ framework\v3.0\Windows Communication Foundation\System.Runtime.Serialization.dll
を参照することにより、参照を追加します。
次の手順を含むapp.config
構成ファイルを作成します。
次に示す手順は、例の太字の部分で呼び出されます。
資格証明を使用して動作を定義します。
カスタム・バインディングを作成します。
メッセージ・リプレイ検出を無効化します。
エンドポイント動作を変更します。
次の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>
プロジェクトをコンパイルします。
コマンド・プロンプトを開いて、プロジェクトのDebugフォルダに移動します。
<client_project_name>.exe
と入力して[Enter]を押します。
メッセージ保護付きKerberosを実装して、OWSM 12cサービス・ポリシーとMicrosoft WCF/.NET 3.5クライアント・ポリシーとの間の相互運用性を実現できます。
次のトピックでは、メッセージ保護付きKerberosを実装するために、OWSM 12c WebサービスおよびMicrosoft WCF/.NET 3.5クライアントを構成する方法を説明します。
OWSM 12cとMicrosoft WCF/.NET 3.5との間の相互運用性のために、メッセージ保護付きKerberosを実装する前に、多くの高度なタスクを完了する必要があります。
相互運用性のための前提条件を構成するには、次のようにします。
OWSM 12c WebサービスおよびMicrosoft WCF/.NET 3.5クライアントを使用してメッセージ保護付きKerberosを実装できます。
次のトピックでは、メッセージ保護付きKerberosを実装するために、OWSM 12c WebサービスおよびMicrosoft WCF/.NET 3.5クライアントを構成する方法を説明します。
OWSM 12c Webサービスを構成して、Microsoft WCF/.NET 3.5クライアントとの相互運用性のためのメッセージ保護付きKerberosを実装できます。
OWSM 12c Webサービスを構成するには、次のようにします。
Webサービス・アプリケーションを作成してデプロイします。
oracle/wss11_kerberos_token_with_message_protection_service_policy
ポリシーのクローンを作成します。
詳細は、『Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理』のWebサービス・ポリシーのクローニングに関する説明を参照してください。
ポリシー設定を編集して、アルゴリズム・スイートをBasic128Rsa15
に設定します。
ポリシーをWebサービスにアタッチします。
詳細は、『Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理』のポリシーのアタッチに関する説明を参照してください。
Microsoft WCF/.NET 3.5クライアントを構成して、OWSM 12c Webサービスとの相互運用性のためのメッセージ保護付きKerberosを実装できます。
Microsoft WCF/.NET 3.5クライアントを構成するには、次のようにします。
ADにユーザーを作成して、Webサービスがホストされるホストを指定します。デフォルトでは、ユーザー・アカウントはRC4-HMAC暗号を使用して作成されます。たとえば、ユーザー名付きのfoobarは、HTTP/foobar
となります。
次のように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サービスがホストされているマシンに移動します。
次のようにsetSpn
コマンドを使用して、サービス・プリンシパルをユーザーにマッピングします。
setSpn -A HTTP/foobar@MYCOMPANY.LOCAL foobar
setSpn -L foobar
ユーザーにマッピングするSPNは1つにしてください。複数のSPNがユーザーにマッピングされている場合は、setSpn -D <spname> <username>
コマンドを使用して削除します。
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
を参照してください。
クライアント・プログラムを実行します。
導出キーを使用してメッセージ保護付きKerberosを実装して、OWSM 12cサービス・ポリシーとMicrosoft WCF/.NET 3.5クライアント・ポリシーとの間の相互運用性を実現できます。
次のトピックでは、OWSM 12c WebサービスおよびMicrosoft WCF/.NET 3.5クライアントを構成して、メッセージ保護付きKerberosを導出キーを使用して実装する方法を説明します。
OWSM 12cとMicrosoft WCF/.NET 3.5との間の相互運用性のために、メッセージ保護付きKerberosを導出キーを使用して実装する前に、多くの高度なタスクを完了する必要があります。
相互運用性のための前提条件を構成するには、次のようにします。
SPNEGOネゴシエーションによるKerberosを実装して、OWSM 12cサービス・ポリシーとMicrosoft WCF/.NET 3.5クライアント・ポリシーとの間の相互運用性を実現できます。
次のトピックでは、SPNEGOネゴシエーションによるKerberosを実装するために、OWSM 12c WebサービスおよびMicrosoft WCF/.NET 3.5クライアントを構成する方法を示します。
OWSM 12c Webサービスを構成して、Microsoft WCF/.NET 3.5クライアントとの相互運用性のためのSPNEGOネゴシエーションによるKerberosを実装できます。
OWSM 12c Webサービスを構成するには、次のようにします。
Webサービス・アプリケーションを作成してデプロイします。
http_spnego_token_service_template
アサーション・テンプレートを使用するポリシーを作成します。
詳細は、『Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理』のSPNEGOネゴシエーションによるKerberosの構成に関する項を参照してください。
ポリシーをWebサービスにアタッチします。
Microsoft WCF/.NET 3.5クライアントを構成して、OWSM 12c Webサービスとの相互運用性のためのSPNEGOネゴシエーションによるKerberosを実装できます。
Microsoft WCF/.NET 3.5クライアントを構成するには、次のようにします。
Microsoft SvcUtilユーティリティを使用して、デプロイされたWebサービスからクライアント・プロキシおよび構成ファイルを作成します。
詳細は、http://msdn.microsoft.com/en-us/library/aa347733%28v=vs.90%29.aspx
を参照してください。
Windowsのエクスプローラでアプリケーションを右クリックして、generatedProxy.csファイルおよびapp.configファイルを追加し、既存の項目を追加を選択します。
次のサンプルに示すように、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
ファイルから取得されます。
クライアントをコンパイルします。
デプロイしたWebサービスにOWSMポリシーをアタッチした後、クライアントを実行します。
SPNEGOネゴシエーションおよび資格証明の委任によるKerberosを実装して、OWSM 12cサービス・ポリシーとMicrosoft WCF/.NET 3.5クライアント・ポリシーとの間の相互運用性を実現できます。
次のトピックでは、SPNEGOネゴシエーションおよび資格証明の委任によるKerberosを実装するために、OWSM 12c Webサービスおよび.NET 3.5クライアントを構成する方法を示します。
OWSM 12c Webサービスを構成して、Microsoft WCF/.NET 3.5クライアントとの相互運用性のためのSPNEGOおよび資格証明の委任によるKerberosを実装できます。
OWSM 12c Webサービスを構成するには、次のようにします。
Webサービス・アプリケーションを作成してデプロイします。
http_spnego_token_service_template
アサーション・テンプレートを使用するポリシーを作成します。
詳細は、『Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理』のSPNEGOネゴシエーションによるKerberosの構成に関する項を参照してください。
ポリシーをWebサービスにアタッチします。
credential.delegation
構成設定の値をtrue
に設定します。
この情報を指定するには、ポリシーをアタッチするときにポリシー構成をオーバーライドします。
詳細は、Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理のポリシー構成プロパティのオーバーライドに関する項を参照してください。
Microsoft WCF/.NET 3.5クライアントを構成して、OWSM 12c Webサービスとの相互運用性のためのSPNEGOおよび資格証明の委任によるKerberosを実装できます。
Microsoft WCF/.NET 3.5クライアントを構成するには、次のようにします。
Microsoft SvcUtilユーティリティを使用して、デプロイされたWebサービスからクライアント・プロキシおよび構成ファイルを作成します。
詳細は、http://msdn.microsoft.com/en-us/library/aa347733%28v=vs.90%29.aspx
を参照してください。
Windowsのエクスプローラでアプリケーションを右クリックして、generatedProxy.cs
ファイルおよびapp.config
ファイルを追加し、既存の項目を追加を選択します。
次の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
ファイルから取得されます。
クライアントをコンパイルします。
デプロイしたWebサービスにOWSMポリシーをアタッチした後、クライアントを実行します。
一方向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ロールで設定されます。
この項の内容は、次のとおりです。
Active Directory Federation Services (ADFS) 2.0をWindows Server 2008またはWindows Server R2システムにインストールして構成できます。
Active Directory Federation Services (ADFS) 2.0をインストールおよび構成するには、次のようにします。
Active Directoryをインストールして構成します。
詳細は、http://technet.microsoft.com/en-us/windowsserver
を参照してください。
ADFS 2.0をインストールして、ウィザードを使用して構成します。
ウィザードを使用してADFS 2.0を構成するときは、必ず、「サーバーの役割」ページで、「フェデレーション サーバー」をクリックしてください。
詳細は、http://technet.microsoft.com/en-us/windowsserver/dd448613
を参照してください。
ダウンロード情報は、http://go.microsoft.com/fwlink/?linkid=151338
を参照してください。
インターネット インフォメーション サービス (IIS) マネージャ・コンソールを使用して、IISで自己署名入りサーバー認証証明書を作成して構成し、デフォルトのWebサイトにバインドします。完了したら、SSLサーバー認証を有効にします。
AD FS 2.0設定ウィザードが自動的にシステムのWebサーバー(IIS)サーバー・ロールにインストールされます。
自己署名付きサーバー認証証明書の作成の概要は、http://technet.microsoft.com/en-us/library/cc771041%28v=ws.10%29.aspx
に記載されています。この項の手順には、使用例固有の情報があります。
インターネット インフォメーション サービス (IIS) マネージャ・コンソールを開きます。
「スタート」メニューで、「すべてのプログラム」→「管理ツール」→「インターネット インフォメーション サービス (IIS) マネージャ」をクリックします。
コンソール・ツリーで、システムの名前を含むルート・ノードをクリックしてから、詳細ペインで、IISグループの「サーバー証明書」というアイコンをダブルクリックします。
「操作」ペインで、「自己署名入り証明書の作成」をクリックします。
コンソール・ツリーで、「Default Web Site」をクリックします。
「操作」ペインで、「バインド」をクリックします。
「サイト バインド」ダイアログ・ボックスで「追加」をクリックします。
「サイト バインドの追加」ダイアログ・ボックスで、「種類」ドロップダウン・リストの「https」を選択します。「SSL 証明書」ドロップダウン・リストで作成した証明書を選択し、「OK」→「閉じる」をクリックします。
インターネット インフォメーション サービス (IIS) マネージャ・コンソールを閉じます。SSLサーバー認証を有効にします。
スタンドアロン・フェデレーション・サーバーとしてシステムを構成します。
詳細は、http://technet.microsoft.com/en-us/library/ee913579%28v=ws.10%29.aspx
を参照してください。
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
を参照してください。
ユーザーを作成し、電子メール・アドレスを含めます。後でSTSを有効にして、サービス用の送信SAMLアサーションのサブジェクト名IDとして電子メール・アドレスを送信します。
次の手順に従って、サンプル・ユーザーをActive Directoryに追加します。各ユーザーに電子メール・アドレスを設定してください。
ドメイン管理者の資格証明を使用してシステムにログインします。
「スタート」→「管理ツール」→「Active Directoryユーザーとコンピュータ」をクリックします。
コンソール・ツリーで、「Users」フォルダを右クリックします。「新規作成」→「ユーザー」をクリックします。
「新しいオブジェクト - ユーザー」ページで、ユーザーを追加し、「次へ」をクリックします。
パスワードを入力し、「ユーザーは次回ログオン時にパスワードの変更が必要」チェック・ボックスを選択解除し、「次へ」をクリックします。
「終了」をクリックします。
「Active Directoryユーザーとコンピュータ」の右端のペインで、新しいユーザー・オブジェクトを右クリックし、「プロパティ」をクリックします。
「全般」タブの「電子メール」ボックスに、ユーザーの電子メール・アドレスを入力し、「OK」をクリックします。
信頼できるSTSサーバーにSTS署名証明書を追加して、信頼できるSAMLトークン発行者としてADFS 2.0 STSを保護できます。
ADFS 2.0 STSによって発行されたSAMLアサーションを信頼するようにOWSMを構成するには、次のようにします。
各ユーザーに、ADFSに設定されるユーザー電子メール・アドレスと一致するメール属性を構成します。
Oracle Internet Directoryでのユーザーの構成の詳細は、『Oracle Internet Directory管理者ガイド』のユーザー作成のためのディレクトリ・エントリの管理を参照してください。
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サービスの保護とポリシーの管理』のポリシーのアタッチに関する説明を参照してください。
電子メール・アドレスまたは名前ID (SAM-Account-Name)をサブジェクト名IDとして使用してWebサービスにSAMLアサーションを発行するようにADFS 2.0を構成できます。この項には、使用例固有の情報があります。
リライング・パーティの詳細は、http://technet.microsoft.com/en-us/library/dd807108%28v=ws.10%29.aspx
を参照してください。
Webサービスをリライイング・パーティとして追加するには、次のようにします。
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つの要求規則のチェーンを作成するには、次のようにします。
WCF/.NET 3.5クライアントを保護するため、複数のセキュリティおよび認証メカニズムを実装できます。
ADFS 2.0を使用してWCF/.NET 3.5クライアントを保護するには、次のようにします。
.NET 3.5およびMicrosoft Visual Studio 2008をインストールします。
STSおよびサービス用のSSLサーバー証明書をWindowsにインポートします。
STSまたはサービス用のSSLサーバー証明書が、信頼できるCAから発行されていない、または自己署名入りである場合は、Microsoft WCF/.NET 3.5クライアントの構成(メッセージ保護付きユーザー名トークン)の説明に従って、MMCツールを使用してインポートする必要があります。
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ベアラー・トークンを取得します。
サービスWSDLを使用して、WCFクライアントを生成します。
Windows Communication Foundationクライアントの作成の詳細は、http://msdn.microsoft.com/en-us/library/ms733133(v=vs.90)
を参照してください。
クライアントを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>
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から発行されている場合、これは不要です。テスト用に自己署名入り証明書を使用している場合、この方法を追加してクライアント側の証明書を検証します。