Bagikan melalui


Sampel Identitas Layanan

Sampel identitas layanan ini menunjukkan cara mengatur identitas untuk suatu layanan. Pada waktu desain, klien dapat mengambil identitas menggunakan metadata layanan dan kemudian pada durasi, klien dapat mengautentikasi identitas layanan. Konsep identitas layanan adalah untuk memungkinkan klien untuk mengautentikasi layanan sebelum memanggil salah satu operasinya, sehingga melindungi klien dari panggilan yang tidak diautentikasi. Pada koneksi yang aman, layanan ini juga mengautentikasi kredensial klien sebelum mengizinkannya mengakses, tetapi ini bukan fokus dari sampel ini. Lihat sampel di Klien yang menunjukkan autentikasi server.

Catatan

Prosedur penyiapan dan petunjuk pembuatan untuk sampel ini terdapat di akhir topik ini.

Contoh ini mengilustrasikan fitur-fitur berikut:

  • Cara mengatur berbagai jenis identitas pada titik akhir yang berbeda untuk suatu layanan. Setiap jenis identitas memiliki kemampuan yang berbeda. Jenis identitas yang akan digunakan tergantung jenis kredensial keamanan yang digunakan pada pengikatan titik akhir.

  • Identitas dapat diatur secara deklaratif dalam konfigurasi atau secara imperatif dalam kode. Biasanya untuk klien dan layanan, Anda harus menggunakan konfigurasi untuk mengatur identitas.

  • Cara mengatur identitas kustom pada klien. Identitas kustom biasanya merupakan penyesuaian dari jenis identitas yang ada yang memungkinkan klien untuk memeriksa informasi klaim lain yang disediakan dalam kredensial layanan untuk membuat keputusan otorisasi sebelum memanggil layanan.

    Catatan

    Sampel ini memeriksa identitas sertifikat tertentu yang disebut identity.com dan kunci RSA yang terkandung dalam sertifikat ini. Saat menggunakan jenis identitas Sertifikat dan RSA dalam konfigurasi pada klien, cara mudah untuk mendapatkan nilai-nilai ini adalah dengan memeriksa WSDL untuk layanan tempat nilai-nilai ini diserialisasi.

Kode sampel berikut menunjukkan cara mengonfigurasi identitas titik akhir layanan dengan Server Nama Domain (DNS) sertifikat menggunakan WSHttpBinding.

//Create a service endpoint and set its identity to the certificate's DNS
WSHttpBinding wsAnonbinding = new WSHttpBinding (SecurityMode.Message);
// Client are Anonymous to the service
wsAnonbinding.Security.Message.ClientCredentialType = MessageCredentialType.None;
WServiceEndpoint ep = serviceHost.AddServiceEndpoint(typeof(ICalculator),wsAnonbinding, String.Empty);
EndpointAddress epa = new EndpointAddress(dnsrelativeAddress,EndpointIdentity.CreateDnsIdentity("identity.com"));
ep.Address = epa;

Identitas juga dapat ditentukan dalam konfigurasi dalam file App.config. Contoh berikut menunjukkan cara mengatur identitas UPN (Nama Prinsipal Pengguna) untuk titik akhir layanan.

<endpoint address="upnidentity"
        behaviorConfiguration=""
        binding="wsHttpBinding"
        bindingConfiguration="WSHttpBinding_Windows"
        name="WSHttpBinding_ICalculator_Windows"
        contract="Microsoft.ServiceModel.Samples.ICalculator">
  <!-- Set the UPN identity for this endpoint -->
  <identity>
      <userPrincipalName value="host\myservice.com" />
  </identity >
</endpoint>

Identitas kustom dapat diatur pada klien dengan mengambil dari kelas EndpointIdentity dan IdentityVerifier. Secara konseptual, kelas IdentityVerifier dapat dianggap sebagai klien yang setara dengan kelas AuthorizationManager layanan. Contoh kode berikut menunjukkan implementasi OrgEndpointIdentity, yang menyimpan nama organisasi agar cocok dengan nama subjek sertifikat server. Pemeriksaan otorisasi untuk nama organisasi terjadi dalam metode CheckAccess pada kelas CustomIdentityVerifier.

// This custom EndpointIdentity stores an organization name
public class OrgEndpointIdentity : EndpointIdentity
{
    private string orgClaim;
    public OrgEndpointIdentity(string orgName)
    {
        orgClaim = orgName;
    }
    public string OrganizationClaim
    {
        get { return orgClaim; }
        set { orgClaim = value; }
    }
}

//This custom IdentityVerifier uses the supplied OrgEndpointIdentity to
//check that X.509 certificate's distinguished name claim contains
//the organization name e.g. the string value "O=Contoso"
class CustomIdentityVerifier : IdentityVerifier
{
    public override bool CheckAccess(EndpointIdentity identity, AuthorizationContext authContext)
    {
        bool returnvalue = false;
        foreach (ClaimSet claimset in authContext.ClaimSets)
        {
            foreach (Claim claim in claimset)
            {
                if (claim.ClaimType == "http://schemas.microsoft.com/ws/2005/05/identity/claims/x500distinguishedname")
                {
                    X500DistinguishedName name = (X500DistinguishedName)claim.Resource;
                    if (name.Name.Contains(((OrgEndpointIdentity)identity).OrganizationClaim))
                    {
                        Console.WriteLine("Claim Type: {0}",claim.ClaimType);
                        Console.WriteLine("Right: {0}", claim.Right);
                        Console.WriteLine("Resource: {0}",claim.Resource);
                        Console.WriteLine();
                        returnvalue = true;
                    }
                }
            }
        }
        return returnvalue;
    }
}

Sampel ini menggunakan sertifikat yang disebut identity.com yang ada di folder solusi Identitas khusus bahasa.

Untuk menyiapkan, membangun, dan menjalankan sampel

  1. Pastikan Anda telah melakukan Prosedur Penyiapan Satu Kali untuk Sampel Windows Communication Foundation.

  2. Untuk membangun solusi edisi C# atau Visual Basic .NET, ikuti petunjuknya di Membangun Sampel WCF.

  3. Untuk menjalankan sampel dalam konfigurasi tunggal atau lintas komputer, ikuti petunjuk di Menjalankan Sampel Windows Communication Foundation.

Untuk menjalankan sampel di komputer yang sama

  1. Di Windows XP atau Windows Vista, impor file sertifikat Identity.pfx di folder Solusi identitas ke penyimpanan sertifikat LocalMachine/My (Pribadi) menggunakan alat snap-in MMC. File ini dilindungi kata sandi. Selama impor, Anda dimintai kata sandi. Ketik xyz ke dalam kotak kata sandi. Untuk informasi selengkapnya, lihat topik Cara: Melihat Sertifikat dengan Snap-in MMC. Setelah ini selesai, jalankan Setup.bat di Perintah Pengembang untuk Visual Studio dengan hak istimewa administrator, yang menyalin sertifikat ini ke penyimpanan CurrentUser/Trusted People untuk digunakan pada komputer klien.

  2. Pada Windows Server 2003, jalankan Setup.bat dari folder penginstalan sampel di dalam perintah Visual Studio dengan hak istimewa administrator. Ini memasang semua sertifikat yang diperlukan untuk menjalankan sampel.

    Catatan

    File batch Setup.bat dirancang untuk dijalankan dari Prompt Perintah Visual Studio. Variabel lingkungan PATH yang diatur dalam Perintah Visual Studio menunjuk ke direktori yang berisi executable yang diperlukan oleh skrip Setup.bat. Pastikan Anda menghapus sertifikat dengan menjalankan Cleanup.bat setelah Anda selesai dengan sampel. Sampel keamanan lainnya menggunakan sertifikat yang sama.

  3. Luncurkan Service.exe dari direktori \service\bin. Pastikan bahwa layanan menunjukkan bahwa layanan sudah siap dan menampilkan perintah ke Tekan <Enter> untuk menghentikan layanan.

  4. Luncurkan Client.exe dari direktori \client\bin atau dengan menekan F5 di Visual Studio untuk membangun dan menjalankan. Aktivitas klien ditampilkan di aplikasi konsol klien.

  5. Jika klien dan layanan tidak dapat berkomunikasi, lihat Tips Pemecahan Masalah untuk Sampel WCF.

Untuk menjalankan sampel di seluruh komputer

  1. Sebelum membangun bagian klien dari sampel, pastikan untuk mengubah nilai untuk alamat titik akhir layanan dalam file Client.cs dalam metode CallServiceCustomClientIdentity. Kemudian bangun sampel.

  2. Buat direktori di komputer layanan.

  3. Salin file program layanan dari service\bin ke direktori di komputer layanan. Salin juga file Setup.bat dan Cleanup.bat ke komputer layanan.

  4. Buat direktori di komputer klien untuk binari klien.

  5. Salin file program klien ke direktori klien di komputer klien. Salin juga file Setup.bat, Cleanup.bat, dan ImportServiceCert.bat ke klien.

  6. Di server, jalankan setup.bat service di Perintah Pengembang untuk Visual Studio dibuka dengan hak istimewa administrator. Menjalankan setup.bat dengan argumen service akan membuat sertifikat layanan dengan nama domain komputer yang sepenuhnya memenuhi syarat dan mengekspor sertifikat layanan ke file yang dinamai Service.cer.

  7. Salin file Service.cer dari direktori layanan ke direktori klien di komputer klien.

  8. Di file Client.exe.config di komputer klien, ubah nilai alamat titik akhir agar sesuai dengan alamat baru layanan Anda. Ada beberapa instans yang harus diubah.

  9. Di klien, jalankan ImportServiceCert.bat di Perintah Pengembang untuk Visual Studio yang dibuka dengan hak istimewa administrator. Langkah ini mengimpor sertifikat layanan dari file Service.cer ke penyimpanan CurrentUser - TrustedPeople.

  10. Di komputer layanan, luncurkan Service.exe dari perintah.

  11. Di komputer klien, luncurkan Client.exe dari perintah. Jika klien dan layanan tidak dapat berkomunikasi, lihat Tips Pemecahan Masalah untuk Sampel WCF.

Untuk membersihkan sampel

  • Jalankan Cleanup.bat di folder sampel setelah Anda selesai menjalankan sampel.

    Catatan

    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 terpasang di penyimpanan CurrentUser - TrustedPeople. Untuk melakukannya, 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.