WS フェデレーション HTTP バインディング

Download sample

このサンプルでは、一般的なフェデレーション サービス、セキュリティ トークン サービス、および対応するクライアントを、Windows Communication Foundation (WCF) を使用して実装する方法を示します。このサンプルは、クライアント コンソール プログラム (client.exe)、セキュリティ トークン サービス コンソール プログラム (securitytokenservice.exe)、およびサービス コンソール プログラム (service.exe) で構成されています。サービスは、要求/応答通信パターンを定義するコントラクトを実装します。このコントラクトは ICalculator インターフェイスによって定義されており、算術演算 (加算、減算、乗算、および 除算) を公開しています。クライアントは、セキュリティ トークンをセキュリティ トークン サービス (STS) から取得し、指定された算術演算を実行する同期要求をサービスに対して行います。サービスは、結果を添えて応答します。クライアント アクティビティは、コンソール ウィンドウに表示されます。

このバインディングの詳細については、「How to: Create a WSFederationHttpBinding」および「How to: Configure Credentials on a Federation Service」を参照してください。

Noteメモ :

このサンプルのセットアップ手順とビルド手順については、このトピックの最後を参照してください。

このサンプルは、ICalculator コントラクトを wsFederationHttpBinding Elementを使用して公開します。このバインディングのクライアント側の構成は次のとおりです。

<bindings>
  <wsFederationHttpBinding>
    <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" >
          <issuer address ="https://localhost:8000/sts/windows" 
                  binding ="wsHttpBinding" />
        </message>
      </security>
    </binding>
  </wsFederationHttpBinding>
</bindings>

security element of wsFederationHttpBindingでは、使用するセキュリティ モードは security mode 値で構成されます。このサンプルでは、メッセージ セキュリティが使用されており、このため message element of wsFederationHttpBindingsecurity element of wsFederationHttpBindingの内側で指定されています。message element of wsFederationHttpBindingの内側にある wsFederationHttpBinding の <issuer> 要素は、セキュリティ トークンをクライアントに発行する STS のアドレスとバインディングを指定します。これにより、クライアントが Calculator サービスに認証されるようになります。

このバインディングのサービス側の構成は次のとおりです。

<bindings>
  <wsFederationHttpBinding>
    <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" >
          <issuerMetadata address ="https://localhost:8000/sts/mex" >
            <identity>
              <certificateReference storeLocation ="CurrentUser"
                     storeName="TrustedPeople"
                     x509FindType ="FindBySubjectNameDistinguisedName" 
                     findValue ="CN=STS"/>
            </identity>
          </issuerMetadata>
        </message>
      </security>
    </binding>
  </wsFederationHttpBinding>
</bindings>

security element of wsFederationHttpBindingでは、使用するセキュリティ モードは security mode 値で構成されます。このサンプルでは、メッセージ セキュリティが使用されており、このため <message> element of wsFederationHttpBindingsecurity element of wsFederationHttpBindingの内側で指定されています。<message> element of wsFederationHttpBindingの内側にある wsFederationHttpBinding の <issuerMetadata> 要素は、STS のメタデータ取得に使用できるエンドポイントのアドレスと ID を指定します。

このサービスの動作を次のコードに示します。

<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>

<issuedTokenAuthentication> of <serviceCredentials> を使用すると、サービスは、認証時にクライアントが提示できるトークンに関する制約を指定できます。この構成の指定では、サブジェクト名が CN=STS である証明書によって署名されたトークンがサービスによって受け入れられます。

STS は、標準の wsHttpBinding を使用して、単一のエンドポイントを公開します。STS は、クライアントからのトークンの要求に応答し、クライアントが Windows アカウントを使用して認証していることを前提として、クライアントのユーザー名がクレームとして含まれているトークンを発行します。STS は、トークン作成の一環として、CN=STS 証明書に関連付けられている秘密キーを使用して、トークンに署名します。また、対称キーを作成し、CN=localhost 証明書に関連付けられている秘密キーを使用して暗号化します。STS は、トークンをクライアントに返すときに、対称キーも返します。クライアントは、発行されたトークンを Calculator サービスに提示し、対称キーを使用してメッセージに署名することで対称キーを認識していることを証明します。

サンプルの実行

サンプルの実行方法を次の手順に示します。サンプルを実行すると、セキュリティ トークン要求が 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.cmd バッチ ファイルを使用すると、適切な証明書を使用してサーバーとセキュリティ トークン サービス (STS) を構成し、自己ホスト型アプリケーションを実行できるようになります。このバッチ ファイルにより、LocalMachine/TrustedPeople 証明書ストアのどちらにも 2 つの証明書が作成されます。片方の証明書は CN=STS のサブジェクト名を持ち、クライアントに発行するセキュリティ トークンを署名するために STS が使用します。もう片方の証明書は CN=localhost のサブジェクト名を持ち、サービスが暗号化を解除できるようにシークレットを暗号化するために STS が使用します。

サンプルを設定、ビルド、および実行するには

  1. setup.cmd ファイルを実行して、必要な証明書を作成します。

  2. ソリューションの C# 版または Visual Basic .NET 版をビルドするには、「Windows Communication Foundation サンプルのビルド」の手順に従います。ソリューション内のすべてのプロジェクトがビルドされていることを確認します (Client、RSTRSTR、SecurityTokenService、Service、Shared)。

  3. Service.exe と SecurityTokenService.exe がどちらも実行されていることを確認します。

  4. client.exe を実行します。

関連項目

その他の技術情報

WS 2007 フェデレーション HTTP バインディング

Footer image

Copyright © 2007 by Microsoft Corporation.All rights reserved.