Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Sampel ini menunjukkan cara menerapkan aplikasi yang menggunakan WS-Security dengan autentikasi nama pengguna untuk klien dan memerlukan autentikasi server menggunakan sertifikat X.509v3 server. Semua pesan aplikasi antara klien dan server ditandatangani dan dienkripsi. Secara default, nama pengguna dan kata sandi yang disediakan oleh klien digunakan untuk masuk ke akun Windows yang valid. Sampel ini didasarkan pada WSHttpBinding. Sampel ini terdiri dari program konsol klien (Client.exe) dan pustaka layanan (Service.dll) yang dihosting oleh Internet Information Services (IIS). Layanan ini menerapkan kontrak yang mendefinisikan pola komunikasi balasan permintaan.
Nota
Prosedur penyiapan dan instruksi build untuk sampel ini terletak di akhir topik ini.
Sampel ini juga menunjukkan:
Pemetaan default ke akun Windows sehingga otorisasi tambahan dapat dilakukan.
Cara mengakses informasi identitas penelepon dari kode layanan.
Layanan ini mengekspos satu titik akhir untuk berkomunikasi dengan layanan, yang didefinisikan menggunakan file konfigurasi Web.config. Titik akhir terdiri dari alamat, pengikatan, dan kontrak. Pengikatan dikonfigurasi dengan wsHttpBinding< standar>, yang defaultnya menggunakan keamanan pesan. Sampel ini mengatur standar< wsHttpBinding> untuk menggunakan autentikasi nama pengguna klien. Perilaku menentukan bahwa kredensial pengguna akan digunakan untuk autentikasi layanan. Sertifikat server harus berisi nilai yang sama untuk nama subjek seperti atribut findValue dalam <serviceCredentials>.
<system.serviceModel>
<protocolMapping>
<add scheme="http" binding="wsHttpBinding" />
</protocolMapping>
<bindings>
<wsHttpBinding>
<!--
This configuration defines the security mode as Message and
the clientCredentialType as Username.
By default, Username authentication attempts to authenticate the provided
username as a Windows computer or domain account.
-->
<binding>
<security mode="Message">
<message clientCredentialType="UserName"/>
</security>
</binding>
</wsHttpBinding>
</bindings>
<!--For debugging purposes set the includeExceptionDetailInFaults attribute to true.-->
<behaviors>
<serviceBehaviors>
<behavior>
<!--
The serviceCredentials behavior allows one to define a service certificate.
A service certificate is used by the service to authenticate itself to the client and to provide message protection.
This configuration references the "localhost" certificate installed during the setup instructions.
-->
<serviceCredentials>
<serviceCertificate findValue="localhost" storeLocation="LocalMachine" storeName="My" x509FindType="FindBySubjectName" />
</serviceCredentials>
<serviceMetadata httpGetEnabled="True"/>
<serviceDebug includeExceptionDetailInFaults="False" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
Konfigurasi titik akhir klien terdiri dari alamat absolut untuk titik akhir layanan, pengikatan, dan kontrak. Pengikatan klien dikonfigurasi dengan securityMode dan authenticationMode yang sesuai. Saat berjalan dalam skenario lintas komputer, alamat titik akhir layanan harus diubah dengan sesuai.
<system.serviceModel>
<client>
<endpoint address="http://localhost/servicemodelsamples/service.svc"
binding="wsHttpBinding"
bindingConfiguration="Binding1"
behaviorConfiguration="ClientCredentialsBehavior"
contract="Microsoft.ServiceModel.Samples.ICalculator" />
</client>
<bindings>
<wsHttpBinding>
<!--
This configuration defines the security mode as Message and
the clientCredentialType as Username.
-->
<binding name="Binding1">
<security mode="Message">
<message clientCredentialType="UserName"/>
</security>
</binding>
</wsHttpBinding>
</bindings>
<!--For debugging purposes set the includeExceptionDetailInFaults attribute to true.-->
<behaviors>
<endpointBehaviors>
<behavior name="ClientCredentialsBehavior">
<!--
Setting the certificateValidationMode to PeerOrChainTrust means that if the certificate
is in the user's Trusted People store, then it is trusted without performing a
validation of the certificate's issuer chain. This setting is used here for convenience so that the
sample can be run without having to have certificates issued by a certification authority (CA).
This setting is less secure than the default, ChainTrust. The security implications of this
setting should be carefully considered before using PeerOrChainTrust in production code.
-->
<clientCredentials>
<serviceCertificate>
<authentication certificateValidationMode="PeerOrChainTrust" />
</serviceCertificate>
</clientCredentials>
</behavior>
</endpointBehaviors>
</behaviors>
</system.serviceModel>
Implementasi klien mengatur nama pengguna dan kata sandi yang akan digunakan.
// Create a client.
CalculatorClient client = new CalculatorClient();
// Configure client with valid computer or domain account (username,password).
client.ClientCredentials.UserName.UserName = username;
client.ClientCredentials.UserName.Password = password.ToString();
// Call GetCallerIdentity service operation.
Console.WriteLine(client.GetCallerIdentity());
...
//Closing the client gracefully closes the connection and cleans up resources.
client.Close();
Saat Anda menjalankan sampel, permintaan dan respons operasi ditampilkan di jendela konsol klien. Tekan ENTER di jendela klien untuk mematikan klien.
MyMachine\TestAccount
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 batch Setup.bat yang disertakan dengan sampel MessageSecurity memungkinkan Anda mengonfigurasi server dengan sertifikat yang relevan untuk menjalankan aplikasi yang dihosting yang memerlukan keamanan berbasis sertifikat. File batch dapat dijalankan dalam dua mode. Untuk menjalankan file batch dalam mode komputer tunggal, ketik setup.bat di baris perintah. Untuk menjalankannya dalam mode layanan, ketik setup.bat service. Anda menggunakan mode ini saat menjalankan sampel di seluruh komputer. Lihat prosedur penyiapan di akhir topik ini untuk detailnya.
Berikut ini memberikan gambaran singkat tentang berbagai bagian file batch.
Membuat sertifikat server
Baris berikut dari file batch Setup.bat membuat sertifikat server yang akan digunakan.
echo ************ echo Server cert setup starting echo %SERVER_NAME% echo ************ echo making server cert echo ************ makecert.exe -sr LocalMachine -ss MY -a sha1 -n CN=%SERVER_NAME% -sky exchange -peVariabel %SERVER_NAME% menentukan nama server. Sertifikat disimpan di penyimpanan LocalMachine. Jika file batch Setup.bat dijalankan dengan argumen layanan (seperti
setup.bat service) %SERVER_NAME% berisi nama domain komputer yang sepenuhnya memenuhi syarat. Jika tidak, akan default ke localhost.Menginstal sertifikat server ke penyimpanan sertifikat tepercaya klien
Baris berikut menyalin sertifikat server ke penyimpanan orang tepercaya klien. Langkah ini diperlukan karena sertifikat yang dihasilkan oleh Makecert.exe tidak dipercaya secara implisit oleh sistem klien. Jika Anda sudah memiliki sertifikat yang berakar pada sertifikat akar tepercaya klien—misalnya, sertifikat yang dikeluarkan Microsoft—langkah mengisi penyimpanan sertifikat klien dengan sertifikat server tidak diperlukan.
certmgr.exe -add -r LocalMachine -s My -c -n %SERVER_NAME% -r CurrentUser -s TrustedPeopleMemberikan izin pada kunci privat sertifikat
Baris berikut dalam file batch Setup.bat membuat sertifikat server yang disimpan di penyimpanan LocalMachine dapat diakses oleh akun proses pekerja ASP.NET.
echo ************ echo setting privileges on server certificates echo ************ for /F "delims=" %%i in ('"%ProgramFiles%\ServiceModelSampleTools\FindPrivateKey.exe" My LocalMachine -n CN^=%SERVER_NAME% -a') do set PRIVATE_KEY_FILE=%%i set WP_ACCOUNT=NT AUTHORITY\NETWORK SERVICE (ver | findstr /C:"5.1") && set WP_ACCOUNT=%COMPUTERNAME%\ASPNET echo Y|cacls.exe "%PRIVATE_KEY_FILE%" /E /G "%WP_ACCOUNT%":R iisresetNota
Jika Anda menggunakan non-A.S. Windows edisi bahasa Inggris Anda harus mengedit file Setup.bat dan mengganti
NT AUTHORITY\NETWORK SERVICEnama akun dengan setara regional Anda.
Untuk menyiapkan, mengompilasi, dan menjalankan sampel
Pastikan Anda telah melakukan Prosedur Penyiapan One-Time untuk Sampel Windows Communication Foundation.
Untuk membangun solusi edisi C# atau Visual Basic .NET, ikuti instruksi di Membangun Sampel Windows Communication Foundation.
Untuk menjalankan sampel pada komputer yang sama
Pastikan jalur menyertakan folder tempat Makecert.exe dan FindPrivateKey.exe berada.
Jalankan Setup.bat dari folder penginstalan sampel di Prompt Perintah Pengembang untuk Visual Studio yang dibuka dengan hak istimewa administrator. Ini menginstal semua sertifikat yang diperlukan untuk menjalankan sampel.
Nota
File batch Setup.bat dirancang untuk dijalankan dari Command Prompt Pengembang untuk Visual Studio. Ini mengharuskan variabel lingkungan jalur menunjuk ke direktori tempat SDK diinstal. Variabel lingkungan ini secara otomatis diatur dalam Perintah Pengembang untuk Visual Studio.
Verifikasi akses ke layanan menggunakan browser dengan memasukkan alamat
http://localhost/servicemodelsamples/service.svc.Luncurkan Client.exe dari \client\bin. Aktivitas klien ditampilkan pada aplikasi konsol klien.
Jika klien dan layanan tidak dapat berkomunikasi, lihat Tips Pemecahan Masalah untuk Sampel WCF.
Untuk menjalankan contoh program di berbagai komputer
Buat direktori pada komputer layanan. Buat aplikasi virtual bernama servicemodelsamples untuk direktori ini dengan menggunakan alat manajemen Layanan Informasi Internet.
Salin file program layanan dari \inetpub\wwwroot\servicemodelsamples ke direktori virtual di komputer layanan. Pastikan Anda menyalin file di subdirektori \bin. Salin juga file Setup.bat dan Cleanup.bat ke komputer layanan.
Buat direktori di komputer klien untuk biner klien.
Salin file program klien ke direktori klien di komputer klien. Salin juga file Setup.bat, Cleanup.bat, dan ImportServiceCert.bat ke klien.
Di server, jalankan
setup.bat servicedi Prompt Perintah Pengembang untuk Visual Studio yang dibuka dengan hak istimewa administrator. Menjalankansetup.batdengan argumenservicemembuat sertifikat layanan dengan nama domain komputer yang sepenuhnya memenuhi syarat dan mengekspor sertifikat layanan ke file bernama Service.cer.Edit Web.config untuk mencerminkan nama sertifikat baru (dalam atribut findValue dalam elemen serviceCertificate) yang sama dengan nama domain komputer yang sepenuhnya memenuhi syarat
.Salin file Service.cer dari direktori layanan ke direktori klien di komputer klien.
Dalam file Client.exe.config di komputer klien, ubah nilai alamat titik akhir agar sesuai dengan alamat baru layanan Anda.
Pada klien, jalankan ImportServiceCert.bat di Prompt Perintah Pengembang untuk Visual Studio yang dibuka dengan privilese administrator. Ini mengimpor sertifikat layanan dari file Service.cer ke penyimpanan CurrentUser - TrustedPeople.
Di komputer klien, jalankan Client.exe dari jendela perintah. Jika klien dan layanan tidak dapat berkomunikasi, lihat Tips Pemecahan Masalah untuk Sampel WCF.
Untuk membersihkan setelah pengujian sampel
Jalankan Cleanup.bat di folder sampel setelah Anda selesai menjalankan sampel.
Nota
Skrip ini tidak menghapus sertifikat layanan pada klien saat menjalankan sampel ini di seluruh komputer. Jika Anda telah menjalankan sampel Windows Communication Foundation (WCF) yang menggunakan sertifikat di seluruh komputer, pastikan untuk menghapus sertifikat layanan yang telah diinstal di penyimpanan CurrentUser - TrustedPeople. Untuk melakukan ini, gunakan perintah berikut:
certmgr -del -r CurrentUser -s TrustedPeople -c -n <Fully Qualified Server Machine Name>Misalnya:certmgr -del -r CurrentUser -s TrustedPeople -c -n server1.contoso.com.