Pengikatan HTTP Federasi WS 2007

Sampel WS2007FederationHttp menunjukkan penggunaan WS2007FederationHttpBinding, pengikatan standar yang bisa Anda gunakan untuk membangun skenario federasi yang mendukung spesifikasi WS-Trust versi 1.3.

Nota

Prosedur penyiapan dan instruksi build untuk sampel ini terletak di akhir topik ini.

Sampel terdiri dari program klien berbasis konsol (Client.exe), program layanan token keamanan berbasis konsol (Securitytokenservice.exe), dan program layanan berbasis konsol (Service.exe). Layanan ini menerapkan kontrak yang mendefinisikan pola komunikasi permintaan/balasan. Kontrak didefinisikan oleh ICalculator antarmuka, yang mengekspos operasi matematika (Add, , SubtractMultiply, dan Divide). Klien mendapatkan token keamanan dari Layanan Token Keamanan (STS) dan membuat permintaan sinkron ke layanan untuk operasi matematika tertentu. Layanan kemudian membalas dengan hasilnya. Aktivitas klien terlihat di jendela konsol.

Sampel membuat kontrak ICalculator tersedia dengan menggunakan elemen ws2007FederationHttpBinding. Konfigurasi pengikatan ini pada klien ditampilkan dalam kode berikut:

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

<Pada bagian keamanan>, security nilai menentukan mode keamanan mana yang harus digunakan. Dalam sampel ini, message keamanan digunakan, itulah sebabnya <pesan> ditentukan di dalam <keamanan>. Elemen <pengeluar sertifikat> di dalam <pesan> menentukan alamat dan pengikatan untuk STS yang mengeluarkan token keamanan ke klien sehingga klien dapat mengautentikasi ke ICalculator layanan.

Konfigurasi pengikatan ini pada layanan ditampilkan dalam kode berikut:

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

<Pada bagian keamanan>, security nilai menentukan mode keamanan mana yang harus digunakan. Dalam sampel ini, message keamanan digunakan, itulah sebabnya <pesan> ditentukan di dalam <keamanan>. Elemen <issuerMetadata> dari ws2007FederationHttpBinding dalam <pesan> menentukan alamat dan identitas untuk titik akhir yang dapat digunakan untuk mengambil metadata untuk STS.

Perilaku untuk layanan ditampilkan dalam kode berikut:

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

IssuedTokenAuthentication<>> memungkinkan layanan menentukan batasan pada token yang memungkinkan klien untuk hadir selama autentikasi. Konfigurasi ini menentukan bahwa token yang ditandatangani oleh sertifikat yang nama subjeknya adalah CN=STS diterima oleh layanan.

STS membuat satu titik akhir tersedia menggunakan standar WS2007HttpBinding. Layanan menanggapi permintaan dari klien untuk token. Jika klien diautentikasi menggunakan akun Windows, layanan akan mengeluarkan token yang berisi nama pengguna klien sebagai klaim. Sebagai bagian dari pembuatan token, STS menandatangani token menggunakan kunci privat yang terkait dengan sertifikat CN=STS. Selain itu, ia membuat kunci simetris dan mengenkripsinya menggunakan kunci publik yang terkait dengan sertifikat CN=localhost. Dalam mengembalikan token ke klien, STS juga mengembalikan kunci simetris. Klien menyajikan token yang dikeluarkan ke ICalculator layanan dan membuktikan bahwa Klien mengetahui kunci simetris dengan menandatangani pesan dengan kunci tersebut.

Saat Anda menjalankan sampel, permintaan untuk token keamanan ditampilkan di jendela konsol STS. Permintaan dan respons operasi ditampilkan di jendela konsol klien dan layanan. Tekan ENTER di salah satu jendela konsol untuk mematikan aplikasi.

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.

File Setup.bat yang disertakan dengan sampel ini memungkinkan Anda mengonfigurasi server dan STS dengan sertifikat yang relevan untuk menjalankan aplikasi yang dihost sendiri. File batch membuat dua sertifikat di penyimpanan sertifikat LocalMachine/TrustedPeople. Sertifikat pertama memiliki nama subjek CN=STS dan digunakan oleh STS untuk menandatangani token keamanan yang dikeluarkannya kepada klien. Sertifikat kedua memiliki nama subjek CN=localhost dan digunakan oleh STS untuk mengenkripsi kunci dengan cara yang dapat didekripsi layanan.

Untuk menyiapkan, mengompilasi, dan menjalankan sampel

  1. Pastikan Anda telah melakukan Prosedur Penyiapan One-Time untuk Sampel Windows Communication Foundation.

  2. Buka Perintah Pengembang untuk Visual Studio dengan hak istimewa administrator dan jalankan file Setup.bat untuk membuat sertifikat yang diperlukan.

File batch ini menggunakan Certmgr.exe dan Makecert.exe, yang didistribusikan dengan Windows SDK. Namun, Anda harus menjalankan Setup.bat dari dalam perintah Visual Studio untuk mengaktifkan skrip untuk menemukan alat-alat ini.

  1. Untuk membangun solusi edisi C# atau Visual Basic .NET, ikuti instruksi di Membangun Sampel Windows Communication Foundation.

  2. Untuk menjalankan sampel dalam konfigurasi satu atau lintas komputer, ikuti instruksi dalam Menjalankan Sampel Windows Communication Foundation. Jika Anda menggunakan Windows Vista, Anda harus menjalankan Service.exe, Client.exe, dan SecurityTokenService.exe dengan hak istimewa yang ditinggikan (klik kanan file lalu klik Jalankan sebagai administrator).