| Oracle® Fusion Middleware Oracle Web Services Manager相互運用性ソリューション・ガイド 12c (12.2.1.3.0) E90307-02 |
|
![]() 前 |
![]() 次 |
この章の内容は次のとおりです。
Microsoft WCF/.NET4.5クライアント向けのメッセージ保護付きユーザー名トークン(WS-Security 1.1)の実装
Microsoft WCF/.NET 4.5クライアント向けのメッセージ保護付き相互認証(WS-Security 1.1)の実装
Microsoft WCF/.NET 4.5クライアント向けの導出キーを使用したメッセージ保護付きKerberosの実装
Microsoft WCF/.NET 4.5クライアント向けのSPNEGOネゴシエーションおよび資格証明の委任によるKerberosの実装
Microsoft Active Directory Federation Services 2.0 (ADFS 2.0) STSを使用するWCF/.NET 4.5クライアント
オラクル社は、OWSM 12cを使用して作成されたWebサービス・セキュリティ・ポリシーと、Microsoft Windows Communication Foundation (WCF)/.NET 4.5 Frameworkを使用して構成されたWebサービス・ポリシーとの相互運用を可能にするための相互運用性テストを実施しました。
Microsoft .NET 4.5 (以前) Frameworkの詳細は、http://msdn.microsoft.com/en-us/library/ff361664%28v=vs.110%29.aspxの「.NET Development」を参照してください。
OWSMの事前定義済ポリシーおよび相互運用性シナリオは、次の項で説明します。
Microsoft WCF/.NET 4.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.110%29.aspxを参照してください。
OWSM 12cとMicrosoft WCF/.NET 4.5との間の相互運用性には様々なシナリオがあります。
Microsoft .NET 4.5の最も一般的な相互運用性シナリオは、次のセキュリティ要件(認証、メッセージ保護およびトランスポート)に基づいています。
注意:
以降のシナリオでは、v3証明書付きのキーストアを使用していることを確認してください。JDK 1.5キーツールでは、デフォルトでv1証明書付きのキーストアが生成されます。
また、キーが適切な拡張(DigitalSignature、Non_repudiation、Key_EnciphermentおよびData_Enciphermentなど)を使用していることも確認してください。
次の表に、OWSM 12cサービス・ポリシーとMicrosoft WCF/.NET 4.5クライアント・ポリシーの相互運用性シナリオを示します。
表6-1 OWSM 12cサービス・ポリシーとMicrosoft WCF/.NET 4.5クライアント・ポリシーの相互運用性
| アイデンティティ・トークン | WS-Securityバージョン | メッセージ保護 | トランスポート・セキュリティ | サービス・ポリシー | クライアント・ポリシー |
|---|---|---|---|---|---|
MTOM |
該当なし |
該当なし |
該当なし |
|
OWSM 12c WebサービスおよびMicrosoft WCF/.NET 4.5クライアントの構成(メッセージ送信最適化メカニズム) |
ユーザー名またはSAML |
1.1 |
はい |
いいえ |
または
|
|
ユーザー名 |
1.0および1.1 |
いいえ |
はい |
または
|
|
相互認証 |
1.1 |
はい |
いいえ |
|
|
Kerberos |
1.1 |
はい |
いいえ |
|
|
SAMLベアラー |
1.0 |
いいえ |
はい |
または
|
次の表に、Microsoft WCF/.NET 4.5サービス・ポリシーとOWSM 12cクライアント・ポリシーの相互運用性シナリオを示します。
表6-2 Microsoft WCF/.NET 4.5サービス・ポリシーとOWSM 12cクライアント・ポリシーの相互運用性
| アイデンティティ・トークン | WS-Securityバージョン | メッセージ保護 | トランスポート・セキュリティ | サービス・ポリシー | クライアント・ポリシー |
|---|---|---|---|---|---|
MTOM |
該当なし |
該当なし |
該当なし |
|
|
ユーザー名 |
1.1 |
はい |
いいえ |
|
|
SSL経由のユーザー名トークン |
1.0 |
いいえ |
はい |
|
|
相互認証 |
1.1 |
はい |
いいえ |
Microsoft WCF/.NET 4.5 WebサービスおよびOWSM 12cクライアントの構成(メッセージ保護付き相互認証) |
|
メッセージ送信最適化メカニズム(MTOM)を実装して、OWSM 12cサービス・ポリシーとMicrosoft WCF/.NET 4.5クライアント・ポリシーとの間の相互運用性およびMicrosoft WCF/.NET 4.5サービス・ポリシーとOWSM 12cクライアント・ポリシーとの間の相互運用性を実現できます。
次のトピックでは、様々な相互運用性シナリオにおいてMTOMを実装する方法について説明します。
OWSM 12c WebサービスおよびMicrosoft WCF/.NET 4.5クライアントを使用してメッセージ送信最適化メカニズム(MTOM)を実装できます。
OWSM 12c WebサービスおよびMicrosoft WCF/.NET 4.5クライアントを構成するには、次のようにします。
Microsoft WCF/.NET 4.5 WebサービスおよびOWSM 12cクライアントを使用してメッセージ送信最適化メカニズム(MTOM)を実装できます。
次のトピックでは、Microsoft WCF/.NET 4.5 WebサービスおよびOWSM 12cクライアントを構成してメッセージ送信最適化メカニズムを実装する方法を説明します。
Microsoft WCF/.NET 4.5 Webサービスを構成して、OWSM 12cクライアントとの相互運用性のためのメッセージ送信最適化メカニズム(MTOM)を実装できます。
Microsoft WCF/.NET 4.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 4.5 Webサービスとの相互運用性のためのメッセージ送信最適化メカニズム(MTOM)を実装できます。
OWSM 12cクライアントを構成するには、次のようにします。
JDeveloperを使用して、.NET Webサービスを使用するSOAコンポジットを作成します。
詳細は、SOA Suiteの開発者ガイドを参照してください。
oracle/wsmtom_policyポリシーをWebサービス・クライアントにアタッチします。
詳細は、『Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理』のポリシーのアタッチに関する説明を参照してください。
メッセージ保護付きユーザー名トークン・ポリシーは、WS-Security 1.1標準に準拠します。このポリシーは、OWSM 12cサービス・ポリシーとMicrosoft WCF/.NET 4.5クライアント・ポリシーとの間の相互運用性およびMicrosoft WCF/.NET 4.5サービス・ポリシーとOWSM 12cクライアント・ポリシーとの間の相互運用性を実現するために実装されます。
次のトピックでは、様々な相互運用性シナリオにおいてメッセージ保護付きユーザー名トークンを実装する方法について説明します。
OWSM 12c WebサービスおよびMicrosoft WCF/.NET 4.5クライアントを使用して、WS-Security 1.1標準に準拠したメッセージ保護付きユーザー名トークンを実装できます。
次のトピックでは、セキュアな通信を有効化する場合およびしない場合に、メッセージ保護付きユーザー名トークンを実装するために、OWSM 12c WebサービスおよびMicrosoft WCF/.NET 4.5クライアントを構成する方法を示します。
OWSM 12c Webサービスを構成して、Microsoft WCF/.NET 4.5クライアントとの相互運用性のためのメッセージ保護付きユーザー名トークンを実装できます。
OWSM 12c Webサービスを構成するには、次のようにします。
SOAP 1.2準拠のWebサービス・アプリケーションを作成します。
セキュアな通信を有効化するかどうかに基づいて、使用するポリシーを選択します。
セキュアな通信を有効化しない場合、次のいずれかのポリシーのクローンを作成します。
oracle/wss11_saml_or_username_token_with_message_protection_service_policy
oracle/wss11_username_token_with_message_protection_service_policy
注意:
セキュアな通信を有効化しない場合、Microsoft WCF/.NET 4.5クライアントの構成(メッセージ保護付きユーザー名トークン)の説明に従って、クライアントのestablishSecurityContextプロパティをfalseに設定する必要があります。
セキュアな通信を有効化するには、次のポリシーのクローンを作成します。
oracle/wss11_username_token_with_message_protection_wssc_service_policy
詳細は、『Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理』のWebサービス・ポリシーのクローニングに関する説明を参照してください。
前述のステップ2でクローン作成されたポリシーのポリシー構成設定を、次のように編集します。
X509トークン導出キー構成設定を有効化します。
「署名の暗号化」構成設定を有効化します。
「署名の確認」構成設定を無効化します。
それ以外の構成設定はすべてデフォルトの構成設定のままにしておきます。
ポリシーをWebサービスにアタッチします。詳細は、『Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理』のポリシーのアタッチに関する説明を参照してください。
次のポリシーもアタッチします。
oracle/wsaddr_policy
次のコマンドを使用して、サービス側のキーストアからX.509証明書ファイルを.cerファイル(alice.cerなど)にエクスポートします。
keytool -export -alias alice -file C:\alice.cer -keystore default-keystore.jks
詳細は、「keytool - 鍵および証明書管理ツール」(http://docs.oracle.com/javase/6/docs/technotes/tools/windows/keytool.html)を参照してください。
Microsoft WCF/.NET 4.5クライアントを構成して、OWSM 12c Webサービスとの相互運用性のためのメッセージ保護付きユーザー名トークンを実装できます。
Microsoft WCF/.NET 4.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クライアントを生成します。
注意:
『Oracle WebLogic Server JAX-WS Webサービスの開発』のWS-Addressingアクション・プロパティの暗黙的な関連付けに関する項の説明に従って、クライアントが暗黙的なwsa:Actionヘッダーを送信しないように、WS-Addressingアクション・ヘッダーを設定する必要がある場合があります。
詳細は、http://msdn.microsoft.com/en-us/library/ms733133(v=vs.110).aspxの『How to: Create a Windows Communication Foundation Client』を参照してください
次のサンプルに示すように、.NETプロジェクトのapp.configファイルを編集して、証明書ファイルを更新し、リプレイを無効化します(変更部分は太字で示されています)。デフォルトのキー設定に従う場合は、<certificate_cn>をaliceに設定する必要があります。
<?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>
<ws2007HttpBinding>
<binding name="Wss11UsernameTokenWithMessageProtectionWSSCServicePortBinding" >
<security mode="Message">
<message clientCredentialType="UserName"
negotiateServiceCredential="false"
algorithmSuite="Basic128"
establishSecurityContext="true" />
<!-- extablishSecurityContext is true by default and therefore does not
have to be specified to enable secure conversation.
Set establishSecurityContext to false if secure conversation is not enabled -->
</security>
</binding>
</ws2007HttpBinding>
</bindings>
<client>
<endpoint address="http://10.244.167.70:7003/OWSMTestApp-Project1-context-root/ws11_username_token_with_message_protection_wsscPort?wsdl"
behaviorConfiguration="PMCert"
binding="ws2007HttpBinding"
bindingConfiguration="Wss11UsernameTokenWithMessageProtectionWSSCServicePortBinding"
contract="ServiceReference1.ws11_username_token_with_message_protection_wssc"
name="ws11_username_token_with_message_protection_wsscPort">
<identity>
<dns value="orakey" />
</identity>
</endpoint>
</client>
</system.serviceModel>
</configuration>
セキュアな通信を有効化しているかどうかに従って、app.configファイルのestablishSecurityContextプロパティを設定する必要があります。
デフォルトでは、establishSecurityContextはtrue (セキュアな通信を有効化している)に設定されます。セキュアな通信を有効化していない場合、establishSecurityContextをfalseに設定します。
例については、サンプル(太字斜体の行)を参照してください。
プロジェクトをコンパイルします。
コマンド・プロンプトを開いて、プロジェクトのDebugフォルダに移動します。
<client_project_name>.exeと入力して[Enter]を押します。
Microsoft WCF/.NET 4.5 WebサービスおよびOWSM 12cクライアントを使用して、WS-Security 1.1標準に準拠したメッセージ保護付きユーザー名トークンを実装できます。
次のトピックでは、Microsoft WCF/.NET 4.5 WebサービスおよびOWSM 12cクライアントを構成して、メッセージ保護付きユーザー名トークンを実装する方法を説明します。
Microsoft WCF/.NET 4.5 Webサービスを構成して、OWSM 12cクライアントとの相互運用性のためのメッセージ保護付きユーザー名トークンを実装できます。
Microsoft WCF/.NET 4.5 Webサービスを構成するには、次のようにします。
.NET Webサービスを作成します。
次の.NET Webサービスのサンプルに示すように、SymmetricSecurityBindingElementを使用して、Webサービスのカスタム・バインディングを作成します。この例は、セキュアな通信を有効化していない場合の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.MessageSecurityVersion =
MessageSecurityVersion.WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005
WSSecurityPolicy11BasicSecurityProfile10;
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();
}
}
セキュアな通信を有効化するには、例のコードに次の調整を行います。
作成されたSymmetricSecurityBindingElement要素(sm)に基づいて、この要素をもう1つ作成します。たとえば次のようになります。
SymmetricSecurityBindingElement scsm = SymmetricSecurityBindingElement.createSecureConversationBindingELement(sm, false)
新しいカスタム・バインディングを作成します。
CustomBinding binding1 = new CustomBinding(scsm);
詳細は、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 password
次に、PRF_WSMCert3.pfxをmmcにインポートします。
keytoolコマンドを使用して、Webサービス・サーバー上に作成された証明書をクライアント・サーバーにインポートします。例:
keytool -import -alias wsmcert3 -file C:\wsmcert3.cer -keystore <owsm_client_keystore>
詳細は、「keytool - 鍵および証明書管理ツール」(http://docs.oracle.com/javase/6/docs/technotes/tools/windows/keytool.html)を参照してください。
Solutions Explorerで「Web service Solution」プロジェクトを右クリックし、「Open Folder In Windows Explorer」をクリックします。
bin/Debugフォルダに移動します。
<project>.exeファイルをダブルクリックします。このコマンドにより、指定したURLでWebサービスが実行されます。
OWSM 12cクライアントを構成して、Microsoft WCF/.NET 4.5 Webサービスとの相互運用性のためのメッセージ保護付きユーザー名トークンを実装できます。
OWSM 12cクライアントを構成するには、次のようにします。
JDeveloperを使用して、.NET Webサービスを使用するSOAコンポジットを作成します。
詳細は、Oracle SOA SuiteでのSOAアプリケーションの開発のOracle JDeveloperでのSOAコンポジット・アプリケーションのデプロイに関する項を参照してください。
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経由のユーザー名トークン・ポリシーは、WS-Security 1.0および1.1標準に準拠します。このポリシーは、OWSM 12cサービス・ポリシーとMicrosoft WCF/.NET 4.5クライアント・ポリシーとの間の相互運用性およびMicrosoft WCF/.NET 4.5サービス・ポリシーとOWSM 12cクライアント・ポリシーとの間の相互運用性を実現するために実装されます。
次のトピックでは、次の相互運用性シナリオにおいてSSL経由のユーザー名トークンを実装する方法について説明します。
OWSM 12c WebサービスおよびMicrosoft WCF/.NET 4.5クライアントを使用して、セキュアな通信を有効化している、および有効化していないSSL経由のユーザー名トークンを実装できます。
次のトピックでは、SSL経由のユーザー名トークンを実装するために、OWSM 12c WebサービスおよびMicrosoft WCF/.NET 4.5クライアントを構成する方法を説明します。
OWSM 12c Webサービスを構成して、Microsoft WCF/.NET 4.5クライアントとの相互運用性のための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/wss11_saml_or_username_token_with_message_protection_service_policy
注意:
セキュアな通信を有効化しない場合、Microsoft WCF/.NET 4.5クライアントの構成(メッセージ保護付きユーザー名トークン)の説明に従って、クライアントのestablishSecurityContextプロパティをfalseに設定する必要があります。
詳細は、Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理のポリシーのアタッチおよびOracle Web Services ManagerによるWebサービスの保護とポリシーの管理の事前定義済ポリシーを参照してください。
次のようにして、アドレッシングが使用されることを指定します。
Oracle Infrastructure Webサービスの場合:
次のポリシーをアタッチします。
oracle/wssaddr_policy
Java EE Webサービスの場合:
Java EE Webサービスおよびクライアントでは、OWSMセキュリティ・ポリシーのサブセットのみがサポートされるため、oracle/wssaddr_policyをJava EE Webサービスにアタッチできません。かわりに、次の例に示すように、サービスのソース・コードで@Addressing注釈を使用して、アドレッシング情報を追加する必要があります。
package oracle.wsm.qa.wls.service.soap12;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
import javax.xml.ws.BindingType;
import javax.xml.ws.soap.Addressing;
import javax.xml.ws.soap.SOAPBinding;
import weblogic.wsee.jws.jaxws.owsm.SecurityPolicy;
@WebService
@BindingType(SOAPBinding.SOAP12HTTP_BINDING)
@Addressing(enabled=true)
public class wss_username_token_over_ssl {
public wss_username_token_over_ssl() {
super();
}
@WebMethod
public String sayHello(@WebParam(name = "arg0") String name){
return "hello "+ name;
}
}
詳細については、次の情報を参照してください。
『Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理』のポリシーのアタッチに関する説明
『Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理』のJava EE WebサービスおよびクライアントでサポートされているOWSMポリシーに関する項
『Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理』の設計時のJava EE Webサービスおよびクライアントへのポリシーのアタッチに関する項
Microsoft WCF/.NET 4.5クライアントを構成して、OWSM 12c Webサービスとの相互運用性のためのSSL経由のユーザー名トークンを実装できます。
Microsoft WCF/.NET 4.5クライアントを構成するには、次のようにします。
WebサービスのWSDLを使用して、.NETクライアントを生成します。
詳細は、http://msdn.microsoft.com/en-us/library/ms733133(v=vs.110).aspxの『How to: Create a Windows Communication Foundation Client』を参照してください。
セキュアな通信を有効化しているかどうかに従って、app.configファイルのestablishSecurityContextプロパティを設定する必要があります。
デフォルトでは、establishSecurityContextはtrue (セキュアな通信を有効化している)に設定されます。セキュアな通信を有効化していない場合、establishSecurityContextをfalseに設定します。
例については、次のサンプル(太字斜体の行)を参照してください。
<configuration>
<system.serviceModel>
<bindings>
<ws2007HttpBinding>
<binding name="wss_username_over_ssl_client">
<security mode="TransportWithMessageCredential">
<transport clientCredentialType="None" />
<message clientCredentialType="UserName"
negotiateServiceCredential="false"
establishSecurityContext="true" />
<!-- extablishSecurityContext is true by default and therefore does not
have to be specified to enable secure conversation.
Set establishSecurityContext to false if secure conversation is not enabled -->
</security>
</binding>
</ws2007HttpBinding>
</bindings>
<client>
<endpoint address="https://10.244.167.70:7004/OWSMTestApp-Project1-context-root/wss_username_token_over_sslPort"
binding="ws2007HttpBinding"
bindingConfiguration="wss_username_over_ssl_client"
contract="ServiceReference1.wss_username_token_over_ssl"
name="wss_username_token_over_sslPort" />
</client>
</system.serviceModel>
</configuration>
プロジェクトをコンパイルします。
コマンド・プロンプトを開いて、プロジェクトのDebugフォルダに移動します。
<client_project_name>.exeと入力して[Enter]を押します。
Microsoft WCF/.NET 4.5 WebサービスおよびOWSM 12cクライアントを使用してSSL経由のユーザー名トークンを実装できます。
次のトピックでは、SSL経由のユーザー名トークンを実装するために、Microsoft WCF/.NET 4.5 WebサービスおよびOWSM 12cクライアントを構成する方法を説明します。
Microsoft WCF/.NET 4.5 Webサービスを構成して、OWSM 12cクライアントとの相互運用性のためのSSL経由のユーザー名トークンを実装できます。
Microsoft WCF/.NET 4.5 Webサービスを構成するには、次のようにします。
サーバーをSSL用に構成します。
詳細は、『Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理』のトランスポート・レベルのセキュリティ(SSL)の構成に関する説明を参照してください。
.NET Webサービスを作成します。
次の.NET Webサービスの例に示すように、SecurityBindingElementを使用して、Webサービスのカスタム・バインディングを作成します。この例は、セキュアな通信を有効化していない場合の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
{
SecurityBindingElement sm =
SecurityBindingElement.CreateUserNameOverTransportBindingElement();
sm.DefaultAlgorithmSuite = System.ServiceModel.Security.SecurityAlgorithmSuite.Basic128;
sm.SetKeyDerivation(false);
sm.SecurityHeaderLayout = SecurityHeaderLayout.Lax;
sm.IncludeTimestamp = true;
sm.KeyEntropyMode = SecurityKeyEntropyMode.CombinedEntropy;
sm.MessageSecurityVersion =
MessageSecurityVersion.WSSecurity11WSTrustFebruary2005WSSecureConversationFebruary2005
WSSecurityPolicy11BasicSecurityProfile10;
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();
}
}
セキュアな通信を有効化するには、例のコードに次の調整を行います。
作成されたSecurityBindingElement要素(sm)に基づいて、この要素をもう1つ作成します。たとえば次のようになります。
SecurityBindingElement scsm = SecurityBindingElement.createSecureConversationBindingElement(sm)
scsmを使用してカスタム・バインディングを作成します。
CustomBinding binding1 = new CustomBinding(scsm);
詳細は、http://msdn.microsoft.com/en-us/library/ms731835.aspxの『How to: Define a Windows Communication Foundation Service Contract』を参照してください。
OWSM 12cクライアントを構成して、Microsoft WCF/.NET 4.5 Webサービスとの相互運用性のためのSSL経由のユーザー名トークンを実装できます。
OWSM 12cクライアントを構成するには、次のようにします。
WebサービスのWSDLを使用して、OWSMクライアントを生成します。
詳細は、SOA Suiteの開発者ガイドを参照してください。
次のポリシーをクライアントにアタッチします。
oracle/wss_username_token_over_ssl_client_policy
詳細は、『Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理』のポリシーのアタッチに関する説明を参照してください。
メッセージ保護付き相互認証ポリシーは、WS-Security 1.1標準に準拠します。このポリシーは、OWSM 12cサービス・ポリシーとMicrosoft WCF/.NET 4.5クライアント・ポリシーとの間の相互運用性およびMicrosoft WCF/.NET 4.5サービス・ポリシーとOWSM 12cクライアント・ポリシーとの間の相互運用性を実現するために実装されます。
次のトピックでは、様々な相互運用性シナリオにおいてメッセージ保護付相互認証を実装する方法について説明します。
OWSM 12c WebサービスおよびMicrosoft WCF/.NET 4.5クライアントの構成(メッセージ保護付き相互認証)
Microsoft WCF/.NET 4.5 WebサービスおよびOWSM 12cクライアントの構成(メッセージ保護付き相互認証)
前述のいずれかのシナリオにおいてWebサービスおよびクライアントを構成する前に、メッセージ保護付き相互認証のための構成前提条件の実行の手順に従います。
OWSM 12cとMicrosoft WCF/.NET 4.5との間の相互運用性のために、WS-Security 1.1標準に準拠したメッセージ保護付き相互認証を実装する前に、多くの高度なタスクを完了する必要があります。
相互運用性のための前提条件を構成するには、次のようにします。
OWSM 12c WebサービスおよびMicrosoft WCF/.NET 4.5クライアントを使用して、WS-Security 1.1標準に準拠したメッセージ保護付き相互認証を実装できます。
次のトピックでは、メッセージ保護付き相互認証を実装するために、OWSM 12c WebサービスおよびMicrosoft WCF/.NET 4.5クライアントを構成する方法を説明します。
OWSM 12c Webサービスを構成して、Microsoft WCF/.NET 4.5クライアントとの相互運用性のためのメッセージ保護付き相互認証を実装できます。
OWSM 12c Webサービスを構成するには、次のようにします。
SOAP 1.2準拠のSOAコンポジットを作成してデプロイします。
Fusion Middleware Controlを使用して、次のポリシーをWebサービスにアタッチします。
oracle/wss11_x509_token_with_message_protection_service_policy
詳細は、『Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理』のポリシーのアタッチに関する説明を参照してください。
wss11_x509_token_with_message_protection_service_policy_netをエクスポートします。encrypted="true"を"false"に変更し、再びインポートします。
<orasp:x509-token orasp:enc-key-ref-mech="thumbprint" orasp:is-encrypted="false" orasp:is-signed="false" orasp:sign-key-ref-mech="direct"/>
詳細は、次のリンクを参照してください。
『Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理』のWebサービス・ポリシーのエクスポートに関する項。
『Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理』のWebサービス・ポリシーのインポートに関する項。
ポリシーをWebサービスにアタッチします。
詳細は、『Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理』のポリシーのアタッチに関する説明を参照してください。
次のポリシーをアタッチします。
oracle/wsaddr_policy
Microsoft WCF/.NET 4.5クライアントを構成して、OWSM 12c Webサービスとの相互運用性のためのメッセージ保護付き相互認証を実装できます。
Microsoft WCF/.NET 4.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.110%29.aspxを参照してください。
次のサンプルに示すように、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>
<ws2007HttpBinding>
<binding name="wss_username_over_ssl_client">
<security mode="TransportWithMessageCredential">
<transport clientCredentialType="None" />
<message clientCredentialType="UserName"
negotiateServiceCredential="false"
establishSecurityContext="false" />
</security>
</binding>
</ws2007HttpBinding>
</bindings>
<client>
<endpoint address="http://<server>:<port>//MyWebService1SoapHttpPort"
binding="ws2007HttpBinding"
contract="MyWebService1"
name="MyWebService1SoapHttpPort"
behaviorConfiguration="secureBehaviour" >
<identity>
<dns value="<certificate_cn>"/>
</identity>
</endpoint>
</client>
</system.serviceModel>
</configuration>
プロジェクトをコンパイルします。
コマンド・プロンプトを開いて、プロジェクトのDebugフォルダに移動します。
<client_project_name>.exeと入力して[Enter]を押します。
メッセージ保護付きKerberosポリシーは、WS-Security 1.1標準に準拠します。このポリシーは、OWSM 12cサービス・ポリシーとMicrosoft WCF/.NET 4.5クライアント・ポリシーとの間の相互運用性を実現するために実装されます。
次のトピックでは、OWSM 12c WebサービスおよびMicrosoft WCF/.NET 4.5クライアントを構成してメッセージ保護付きKerberosを実装する方法を説明します。
OWSM 12c WebサービスとMicrosoft WCF/.NET 4.5クライアントとの間の相互運用性のために、メッセージ保護付きKerberosを実装する前に、多くの高度なタスクを完了する必要があります。
相互運用性のための前提条件を構成するには、次のようにします。
OWSM 12c WebサービスおよびMicrosoft WCF/.NET 4.5クライアントを使用してメッセージ保護付きKerberosを実装できます。
次のトピックでは、OWSM 12c WebサービスおよびMicrosoft WCF/.NET 4.5クライアントを構成してメッセージ保護付きKerberosを実装する方法を説明します。
OWSM 12c Webサービスを構成して、Microsoft WCF/.NET 4.5クライアントとの相互運用性のためのメッセージ保護付きKerberosを実装できます。
OWSM 12c Webサービスを構成するには、次のようにします。
Webサービス・アプリケーションを作成してデプロイします。
詳細は、『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 4.5クライアントを構成して、OWSM 12c Webサービスとの相互運用性のためのメッセージ保護付きKerberosを実装できます。
Microsoft WCF/.NET 4.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 -L foobar
setSpn -A HTTP/foobar@MYCOMPANY.LOCAL foobar
ユーザーにマッピングするSPNは1つにしてください。複数のSPNがユーザーにマッピングされている場合は、setSpn -D <spname> <username>コマンドを使用して削除します。
次のように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.110%29.aspxを参照してください。
クライアント・プログラムを実行します。
導出キーを使用したメッセージ保護付きKerberosポリシーは、WS-Security 1.1標準に準拠します。このポリシーは、OWSM 12cサービス・ポリシーとMicrosoft WCF/.NET 4.5クライアント・ポリシーとの間の相互運用性を実現するために実装されます。
次のトピックでは、OWSM 12c WebサービスおよびMicrosoft WCF/.NET 4.5クライアントを構成して、メッセージ保護付きKerberosを導出キーを使用して実装する方法を説明します。
OWSM 12c WebサービスとMicrosoft WCF/.NET 4.5クライアントとの間の相互運用性のために、導出キーを使用してメッセージ保護付きKerberosを実装する前に、多くの高度なタスクを完了する必要があります。
相互運用性のための前提条件を構成するには、次のようにします。
OWSM 12c WebサービスおよびMicrosoft WCF/.NET 4.5クライアントを使用して、導出キーを使用したメッセージ保護付きKerberosを実装できます。
次のトピックでは、メッセージ保護付きKerberosを導出キーを使用して実装するために、OWSM 12c WebサービスおよびMicrosoft WCF/.NET 4.5クライアントを構成する方法を説明します。
OWSM 12c Webサービスを構成して、Microsoft WCF/.NET 4.5クライアントとの相互運用性のための、導出キーを使用したメッセージ保護付きKerberosを実装できます。
OWSM 12c Webサービスを構成するには、次のようにします。
Webサービス・アプリケーションを作成してデプロイします。
詳細は、『Webサービスの管理』のWebサービス・アプリケーションのデプロイに関する説明を参照してください。
wss11_kerberos_token_with_message_protection_basic128_service_policyポリシーのクローンを作成します。
詳細は、『Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理』のWebサービス・ポリシーのクローニングに関する説明を参照してください。
ポリシー設定を編集して、「Derived Keys」オプションを有効にします。
ポリシーをWebサービスにアタッチします。
詳細は、『Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理』のポリシーのアタッチに関する説明を参照してください。
Microsoft WCF/.NET 4.5クライアントを構成して、OWSM 12c Webサービスとの相互運用性のための、導出キーを使用したメッセージ保護付きKerberosを実装できます。
Microsoft WCF/.NET 4.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="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>
クライアント・プログラムを実行します。
SPNEGOネゴシエーションによるKerberosポリシーは、WS-Security 1.1標準に準拠します。このポリシーは、OWSM 12cサービス・ポリシーとMicrosoft WCF/.NET 4.5クライアント・ポリシーとの間の相互運用性を実現するために実装されます。
次のトピックでは、SPNEGOネゴシエーションによるKerberosを実装するために、OWSM 12c WebサービスおよびMicrosoft WCF/.NET 4.5クライアントを構成する方法を示します。
OWSM 12c Webサービスを構成して、Microsoft WCF/.NET 4.5クライアントとの相互運用性のためのSPNEGOネゴシエーションによるKerberosを実装できます。
OWSM 12c Webサービスを構成するには、次のようにします。
Webサービス・アプリケーションを作成してデプロイします。
詳細は、『Webサービスの管理』のWebサービス・アプリケーションのデプロイに関する説明を参照してください。
http_spnego_token_service_templateアサーション・テンプレートを使用するポリシーを作成します。
詳細は、『Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理』の「SPNEGOネゴシエーションによるKerberosの構成」を参照してください。
ポリシーをWebサービスにアタッチします。
Microsoft WCF/.NET 4.5クライアントを構成して、OWSM 12c Webサービスとの相互運用性のためのSPNEGOネゴシエーションによるKerberosを実装できます。
Microsoft WCF/.NET 4.5クライアントを構成するには、次のようにします。
Microsoft SvcUtilユーティリティを使用して、デプロイされたWebサービスからクライアント・プロキシおよび構成ファイルを作成します。
詳細は、http://msdn.microsoft.com/en-us/library/aa347733%28v=vs.110%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ポリシーは、WS-Security 1.1標準に準拠します。このポリシーは、OWSM 12cサービス・ポリシーとMicrosoft WCF/.NET 4.5クライアント・ポリシーとの間の相互運用性を実現するために実装されます。
OWSM 12c Webサービスを構成するには、次のようにします。
セキュリティ・ポリシーを使用して、Microsoft Active Directory Federation Services 2.0 (ADFS 2.0)セキュア・トークン・サービス(STS)を使用するWCF/.NET 4.5クライアントを保護できます。
次のポリシーが、ADFS 2.0を使用するWCF/.NET 4.5クライアントの保護に使用されます。
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
注意:
SAML送信者保証トークンは、この使用例ではサポートされません。
この項で説明する手順は、Windows Server 2008またはWindows Server 2008 R2へのADFS 2.0のインストールに基づいています。
次のトピックでは、ADFS 2.0をインストールおよび構成する方法を説明します。
ADFS 2.0をWindows Server 2008またはWindows Server 2008 R2システムにインストールして構成できます。
Active Directory Federation Services (ADFS) 2.0をインストールおよび構成するには、次のようにします。
詳細については、次の情報を参照してください。
http://technet.microsoft.com/en-us/library/dd349801%28v=ws.10%29.aspxの「Windows Server 2008 R2 and Windows Server 2008」
http://technet.microsoft.com/en-us/library/dd578336%28v=ws.10%29.aspxの「Active Directory Services」
http://technet.microsoft.com/library/cc772128%28WS.10%29.aspxの「Active Directory Federation Services」
http://technet.microsoft.com/en-us/library/cc731443%28v=ws.10%29.aspxの「AD FS Step-by-Step Guide」
http://technet.microsoft.com/en-us/library/dd807092%28v=ws.10%29.aspxの「AD FS 2.0 Deployment Guide」
信頼できる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
詳細は、次を参照してください。
『Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理』のポリシーのアタッチに関する説明
Oracle Web Services ManagerによるWebサービスの保護およびポリシーの管理の事前定義済のポリシー
電子メール・アドレスまたは名前ID (SAM-Account-Name)をサブジェクト名IDとして使用してWebサービスにSAMLアサーションを発行するようにADFS 2.0を構成できます。
ADFS 2.0をリライイング・パーティとして構成するには、次のようにします。