WS2007FederationHttp サンプルでは、WS-Trust 仕様のバージョン 1.3 をサポートするフェデレーション シナリオの構築に使用できる標準バインディングであるWS2007FederationHttpBindingの使用を示します。
注
このサンプルのセットアップ手順とビルド手順は、このトピックの最後にあります。
このサンプルは、コンソール ベースのクライアント プログラム (Client.exe)、コンソール ベースのセキュリティ トークン サービス プログラム (Securitytokenservice.exe)、およびコンソール ベースのサービス プログラム (Service.exe) で構成されています。 このサービスは、要求/応答通信パターンを定義するコントラクトを実装します。 コントラクトは、算術演算 (ICalculator
、Add
、Subtract
、Multiply
) を公開するDivide
インターフェイスによって定義されます。 クライアントは、セキュリティ トークン サービス (STS) からセキュリティ トークンを取得し、特定の算術演算に対してサービスに同期要求を行います。 その後、サービスは結果で応答します。 クライアント アクティビティはコンソール ウィンドウに表示されます。
このサンプルでは、ICalculator
要素を使用してws2007FederationHttpBinding
コントラクトを使用できるようにします。 クライアントでのこのバインディングの構成を次のコードに示します。
<bindings>
<ws2007FederationHttpBinding>
<binding name="ServiceFed" >
<security mode ="Message">
<message issuedKeyType ="SymmetricKey"
issuedTokenType ="http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV1.1" >
<!-- Endpoint address and binding for Security Token Service -->
<issuer address ="http://localhost:8000/sts/windows"
binding ="ws2007HttpBinding" />
</message>
</security>
</binding>
</ws2007FederationHttpBinding>
</bindings>
<security>では、security
値は使用するセキュリティ モードを指定します。 このサンプルでは、message
セキュリティが使用されるため、<セキュリティ> の中に<メッセージ>を指定します。
< 内の > 要素クライアントに対してセキュリティ トークンを発行する STS のアドレスとバインドを指定し、クライアントが< サービスに対して認証できるようにします。
サービスに対するこのバインディングの構成を次のコードに示します。
<bindings>
<ws2007FederationHttpBinding>
<binding name="ServiceFed" >
<security mode ="Message">
<message issuedKeyType ="SymmetricKey"
issuedTokenType ="http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV1.1" >
<!-- Metadata address for Security Token Service -->
<issuerMetadata address ="http://localhost:8000/sts/mex" >
<identity>
<certificateReference storeLocation ="CurrentUser"
storeName="TrustedPeople"
x509FindType ="FindBySubjectDistinguishedName"
findValue ="CN=STS" />
</identity>
</issuerMetadata>
</message>
</security>
</binding>
</ws2007FederationHttpBinding>
</bindings>
<security>では、security
値は使用するセキュリティ モードを指定します。 このサンプルでは、message
セキュリティが使用されるため、<セキュリティ> の中に<メッセージ>を指定します。
<message 内の> 要素ws2007FederationHttpBinding
STS のメタデータを取得するために使用できるエンドポイントのアドレスと ID を指定します。
サービスの動作を次のコードに示します。
<behaviors>
<serviceBehaviors>
<behavior name ="ServiceBehaviour" >
<serviceDebug includeExceptionDetailInFaults ="true"/>
<serviceMetadata httpGetEnabled ="true"/>
<serviceCredentials>
<issuedTokenAuthentication>
<knownCertificates>
<add storeLocation ="LocalMachine"
storeName="TrustedPeople"
x509FindType="FindBySubjectDistinguishedName"
findValue="CN=STS" />
</knownCertificates>
</issuedTokenAuthentication>
<serviceCertificate storeLocation ="LocalMachine"
storeName ="My"
x509FindType ="FindBySubjectDistinguishedName"
findValue ="CN=localhost"/>
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
<を使用すると、認証中にクライアントが提示できるトークンに対する制約をサービスで指定できます。 この構成では、サブジェクト名が CN=STS である証明書によって署名されたトークンがサービスによって受け入れられることを指定します。
STS は、標準の WS2007HttpBindingを使用して単一のエンドポイントを使用できるようにします。 このサービスは、トークンに対するクライアントからの要求に応答します。 クライアントが Windows アカウントを使用して認証されている場合、サービスはクライアントのユーザー名を含むトークンを要求として発行します。 トークンの作成の一環として、STS は CN=STS 証明書に関連付けられている秘密キーを使用してトークンに署名します。 さらに、対称キーを作成し、CN=localhost 証明書に関連付けられている公開キーを使用して暗号化します。 トークンをクライアントに返す場合、STS は対称キーも返します。 クライアントは発行されたトークンを ICalculator
サービスに提示し、そのキーを使用してメッセージに署名することで対称キーを認識していることを証明します。
サンプルを実行すると、STS コンソール ウィンドウにセキュリティ トークンの要求が表示されます。 操作の要求と応答は、クライアントおよびサービス コンソール ウィンドウに表示されます。 いずれかのコンソール ウィンドウで Enter キーを押して、アプリケーションをシャットダウンします。
Add(100,15.99) = 115.99
Subtract(145,76.54) = 68.46
Multiply(9,81.25) = 731.25
Divide(22,7) = 3.14285714285714
Press <ENTER> to terminate client.
このサンプルに含まれる Setup.bat ファイルを使用すると、セルフホステッド アプリケーションを実行するために、関連する証明書を使用してサーバーと STS を構成できます。 バッチ ファイルは、LocalMachine/TrustedPeople 証明書ストアに 2 つの証明書を作成します。 最初の証明書は CN=STS のサブジェクト名を持ち、STS がクライアントに発行するセキュリティ トークンに署名するために使用されます。 2 つ目の証明書は CN=localhost というサブジェクト名を持ち、STS がサービスで暗号化を解除できるようにキーを暗号化するために使用されます。
サンプルを設定、ビルド、実行するには
Windows Communication Foundation サンプル のOne-Time セットアップ手順を実行していることを確認します。
管理者特権で Visual Studio の開発者コマンド プロンプトを開き、Setup.bat ファイルを実行して必要な証明書を作成します。
このバッチ ファイルでは 、 Windows SDK と共に配布されるCertmgr.exeと Makecert.exeが使用されます。 ただし、スクリプトでこれらのツールを検索できるようにするには、Visual Studio コマンド プロンプト内から Setup.bat を実行する必要があります。
ソリューションの C# または Visual Basic .NET エディションをビルドするには、「Windows Communication Foundation サンプルのビルド」の手順に従います。
シングル コンピューター構成またはクロスコンピューター構成でサンプルを実行するには、「 Windows Communication Foundation サンプルの実行」の手順に従います。 Windows Vista を使用している場合は、管理者特権 でService.exe、 Client.exe、 およびSecurityTokenService.exe を実行する必要があります (ファイルを右クリックし、[ 管理者として実行] をクリックします)。