Bagikan melalui


Penyedia Peran dan Keanggotaan

Contoh Penyedia Peran dan Keanggotaan menunjukkan cara layanan dapat menggunakan keanggotaan ASP.NET dan penyedia peran untuk mengotentikasi dan mengotorisasi klien.

Dalam sampel ini, klien adalah aplikasi konsol (.exe) dan layanan di-hosting oleh Layanan Informasi Internet (IIS).

Catatan

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

Sampel menunjukkan cara:

  • Klien dapat mengotentikasi menggunakan kombinasi nama pengguna-kata sandi.

  • Server dapat memvalidasi mandat klien terhadap penyedia keanggotaan ASP.NET.

  • Server dapat diautentikasi menggunakan sertifikat X.509 server.

  • Server dapat memetakan klien yang diautentikasi ke peran menggunakan penyedia peran ASP.NET.

  • Server dapat menggunakan PrincipalPermissionAttribute untuk mengontrol akses ke metode tertentu yang diekspos oleh layanan.

Keanggotaan dan penyedia peran dikonfigurasi untuk menggunakan toko yang didukung oleh SQL Server. String koneksi dan berbagai opsi ditentukan dalam file konfigurasi layanan. Penyedia keanggotaan diberi nama SqlMembershipProvider sedangkan penyedia peran diberi nama SqlRoleProvider.

<!-- Set the connection string for SQL Server -->
<connectionStrings>
  <add name="SqlConn"
       connectionString="Data Source=localhost;Integrated Security=SSPI;Initial Catalog=aspnetdb;" />
</connectionStrings>

<system.web>
  <!-- Configure the Sql Membership Provider -->
  <membership defaultProvider="SqlMembershipProvider" userIsOnlineTimeWindow="15">
    <providers>
      <clear />
      <add
        name="SqlMembershipProvider"
        type="System.Web.Security.SqlMembershipProvider"
        connectionStringName="SqlConn"
        applicationName="MembershipAndRoleProviderSample"
        enablePasswordRetrieval="false"
        enablePasswordReset="false"
        requiresQuestionAndAnswer="false"
        requiresUniqueEmail="true"
        passwordFormat="Hashed" />
    </providers>
  </membership>

  <!-- Configure the Sql Role Provider -->
  <roleManager enabled ="true"
               defaultProvider ="SqlRoleProvider" >
    <providers>
      <add name ="SqlRoleProvider"
           type="System.Web.Security.SqlRoleProvider"
           connectionStringName="SqlConn"
           applicationName="MembershipAndRoleProviderSample"/>
    </providers>
  </roleManager>
</system.web>

Layanan mengekspos titik akhir tunggal untuk berkomunikasi dengan layanan, yang ditentukan menggunakan file konfigurasi Web.config. Titik akhir terdiri dari alamat, pengikatan, dan kontrak. Pengikatan dikonfigurasi dengan standar wsHttpBinding, yang secara default menggunakan autentikasi Windows. Contoh ini menetapkan standar wsHttpBinding untuk menggunakan autentikasi nama pengguna. Perilaku menentukan bahwa sertifikat server akan digunakan untuk autentikasi layanan. Sertifikat server harus berisi nilai yang sama untuk SubjectName sebagai atribut findValue di elemen konfigurasi <serviceCertificate>. Selain perilaku menentukan bahwa autentikasi pasangan nama pengguna-sandi dilakukan oleh penyedia keanggotaan ASP.NET dan pemetaan peran dilakukan oleh penyedia peran ASP.NET dengan menentukan nama yang ditentukan untuk dua penyedia.

<system.serviceModel>

  <protocolMapping>
    <add scheme="http" binding="wsHttpBinding" />
  </protocolMapping>

  <bindings>
    <wsHttpBinding>
      <!-- Set up a binding that uses Username as the client credential type -->
      <binding>
        <security mode ="Message">
          <message clientCredentialType ="UserName"/>
        </security>
      </binding>
    </wsHttpBinding>
  </bindings>

  <behaviors>
    <serviceBehaviors>
      <behavior>
        <!-- Configure role based authorization to use the Role Provider -->
        <serviceAuthorization principalPermissionMode ="UseAspNetRoles"
                              roleProviderName ="SqlRoleProvider" />
        <serviceCredentials>
          <!-- Configure user name authentication to use the Membership Provider -->
          <userNameAuthentication userNamePasswordValidationMode ="MembershipProvider"
                                  membershipProviderName ="SqlMembershipProvider"/>
          <!-- Configure the service certificate -->
          <serviceCertificate storeLocation ="LocalMachine"
                              storeName ="My"
                              x509FindType ="FindBySubjectName"
                              findValue ="localhost" />
        </serviceCredentials>
        <!--For debugging purposes set the includeExceptionDetailInFaults attribute to true-->
        <serviceDebug includeExceptionDetailInFaults="false" />
        <serviceMetadata httpGetEnabled="true"/>
      </behavior>
    </serviceBehaviors>
  </behaviors>
</system.serviceModel>

Saat Anda menjalankan sampel, klien memanggil berbagai operasi layanan pada tiga akun pengguna yang berbeda: Alice, Bob, dan Charlie. Permintaan dan tanggapan operasi ditampilkan di jendela konsol klien. Keempat panggilan yang dilakukan sebagai pengguna "Alice" harus berhasil. Pengguna "Bob" harus mendapatkan kesalahan akses ditolak saat mencoba memanggil metode Divide. Pengguna "Charlie" harus mendapatkan kesalahan akses ditolak saat mencoba memanggil metode Multiply. Tekan ENTER di jendela klien untuk mematikan komputer klien.

Untuk menyiapkan, membangun, dan menjalankan sampel

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

  2. Pastikan Anda telah mengonfigurasi Database Layanan Aplikasi ASP.NET.

    Catatan

    Jika Anda menjalankan SQL Server Express Edition, nama server Anda adalah .\SQLEXPRESS. Server ini harus digunakan saat mengonfigurasi ASP.NET Application Services Database serta di string koneksi Web.config.

    Catatan

    Akun proses pekerja ASP.NET harus memiliki izin pada database yang dibuat dalam langkah ini. Gunakan utilitas sqlcmd atau SQL Server Management Studio untuk melakukan cara ini.

  3. Untuk menjalankan sampel dalam konfigurasi tunggal atau lintas komputer, gunakan petunjuk berikut.

Untuk menjalankan sampel di komputer yang sama

  1. Pastikan jalur tersebut menyertakan folder tempat Makecert.exe berada.

  2. Jalankan Setup.bat dari folder instalasi sampel di Perintah Pengembang untuk Visual Studio yang dijalankan dengan hak administrator. Cara ini menginstal sertifikat layanan yang diperlukan untuk menjalankan sampel.

  3. Luncurkan Client.exe dari \client\bin. Aktivitas klien ditampilkan di aplikasi konsol klien.

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

Untuk menjalankan sampel di seluruh komputer

  1. Buat direktori di komputer layanan. Buat aplikasi virtual bernama servicemodelsamples untuk direktori ini menggunakan alat manajemen Layanan informasi Internet (IIS).

  2. 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, GetComputerName.vbs, dan Cleanup.bat ke komputer layanan.

  3. Buat direktori di komputer klien untuk binari klien.

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

  5. Di server, buka Perintah Pengembang untuk Visual Studio dengan hak administratif dan jalankan setup.bat service. 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.

  6. Edit Web.config untuk mencerminkan nama sertifikat baru (dalam atribut findValue di <serviceCertificate>), yang sama dengan nama domain komputer yang sepenuhnya memenuhi syarat.

  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.

  9. Di klien, buka Perintah Pengembang untuk Visual Studio dengan hak administratif dan jalankan ImportServiceCert.bat. Langkah ini mengimpor sertifikat layanan dari file Service.cer ke penyimpanan CurrentUser - TrustedPeople.

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

File Batch Penyiapan

File batch Setup.bat yang disertakan dengan sampel ini memungkinkan Anda untuk mengonfigurasi server dengan sertifikat yang relevan untuk menjalankan aplikasi yang dihosting sendiri yang memerlukan keamanan berbasis sertifikat server. File batch ini harus dimodifikasi untuk bekerja di seluruh komputer atau untuk bekerja dalam kasus yang tidak dihosting.

Berikut ini memberikan gambaran singkat tentang berbagai bagian file batch sehingga dapat dimodifikasi untuk berjalan dalam konfigurasi yang sesuai:

  • Membuat sertifikat server.

    Baris dari file batch Setup.bat berikut membuat sertifikat server yang akan digunakan. Variabel %SERVER_NAME% menentukan nama server. Ubah variabel ini untuk menentukan nama server Anda sendiri. File batch ini default ke localhost.

    Sertifikat disimpan di penyimpanan Saya (Pribadi) di bawah lokasi penyimpanan LocalMachine.

    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 -pe
    
  • Menginstal sertifikat server ke penyimpanan sertifikat tepercaya klien.

    Baris berikut dalam file batch Setup.bat 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 di-root di sertifikat root tepercaya klien—misalnya, sertifikat yang diterbitkan Microsoft—langkah mengisi penyimpanan sertifikat klien dengan sertifikat server ini tidak diperlukan.

    certmgr.exe -add -r LocalMachine -s My -c -n %SERVER_NAME% -r CurrentUser -s TrustedPeople