Aracılığıyla paylaş


Üyelik ve Rol Sağlayıcısı

Üyelik ve Rol Sağlayıcısı örneği, bir hizmetin istemcilerin kimliğini doğrulamak ve yetkilendirmek için ASP.NET üyeliğini ve rol sağlayıcılarını nasıl kullanabileceğini gösterir.

Bu örnekte istemci bir konsol uygulamasıdır (.exe) ve hizmet Internet Information Services (IIS) tarafından barındırılır.

Not

Bu örnek için kurulum yordamı ve derleme yönergeleri bu konunun sonunda yer alır.

Örnekte aşağıdakiler gösterilmiştir:

  • İstemci, kullanıcı adı-parola bileşimini kullanarak kimlik doğrulaması yapabilir.

  • Sunucu, istemci kimlik bilgilerini ASP.NET üyelik sağlayıcısına karşı doğrulayabilir.

  • Sunucunun kimliği, sunucunun X.509 sertifikası kullanılarak doğrulanabilir.

  • Sunucu, ASP.NET rol sağlayıcısını kullanarak kimliği doğrulanmış istemciyi bir role eşleyebilir.

  • Sunucu, hizmeti tarafından kullanıma sunulan belirli yöntemlere erişimi denetlemek için komutunu kullanabilir PrincipalPermissionAttribute .

Üyelik ve rol sağlayıcıları, SQL Server tarafından yedeklenen bir depoyu kullanacak şekilde yapılandırılır. Hizmet yapılandırma dosyasında bir bağlantı dizesi ve çeşitli seçenekler belirtilir. Üyelik sağlayıcısına adı SqlMembershipProvider , rol sağlayıcısına ise adı SqlRoleProviderverilir.

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

Hizmet, Web.config yapılandırma dosyası kullanılarak tanımlanan hizmetle iletişim kurmak için tek bir uç nokta sunar. Uç nokta bir adres, bağlama ve sözleşmeden oluşur. Bağlama, varsayılan olarak Windows kimlik doğrulamasının kullanıldığı standart wsHttpBindingile yapılandırılır. Bu örnek, kullanıcı adı kimlik doğrulamasını kullanmak için standardı wsHttpBinding ayarlar. Davranış, sunucu sertifikasının hizmet kimlik doğrulaması için kullanılacağını belirtir. Sunucu sertifikası, serviceCertificate yapılandırma öğesindeki <özniteliğiyle findValue aynı değeri SubjectName içermelidir.> Ayrıca davranış, kullanıcı adı-parola çiftlerinin kimlik doğrulamasının ASP.NET üyelik sağlayıcısı tarafından gerçekleştirildiğini ve rol eşlemesinin iki sağlayıcı için tanımlanan adları belirterek ASP.NET rol sağlayıcısı tarafından gerçekleştirildiğini belirtir.

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

Örneği çalıştırdığınızda, istemci üç farklı kullanıcı hesabı altında çeşitli hizmet işlemlerini çağırır: Alice, Bob ve Charlie. İşlem istekleri ve yanıtları istemci konsolu penceresinde görüntülenir. "Alice" kullanıcısı olarak yapılan dört çağrının da başarılı olması gerekir. "Bob" kullanıcısı Divide yöntemini çağırmaya çalışırken erişim reddedildi hatası almalıdır. Çarpma yöntemini çağırmaya çalışırken "Charlie" kullanıcısı erişim reddedildi hatası almalıdır. İstemciyi kapatmak için istemci penceresinde ENTER tuşuna basın.

Örneği ayarlamak, derlemek ve çalıştırmak için

  1. Çözümün C# veya Visual Basic .NET sürümünü oluşturmak için Windows Communication Foundation Örneklerini Çalıştırma başlığındaki yönergeleri izleyin.

  2. ASP.NET Application Services Veritabanını yapılandırdığınızdan emin olun.

    Not

    SQL Server Express Edition çalıştırıyorsanız sunucu adınız .\SQLEXPRESS olur. Bu sunucu hem ASP.NET Application Services Veritabanı'nı hem de Web.config bağlantı dizesi yapılandırırken kullanılmalıdır.

    Not

    ASP.NET çalışan işlemi hesabının bu adımda oluşturulan veritabanında izinleri olmalıdır. Bunu yapmak için sqlcmd yardımcı programını veya SQL Server Management Studio'yu kullanın.

  3. Örneği tek veya bilgisayarlar arası bir yapılandırmada çalıştırmak için aşağıdaki yönergeleri kullanın.

Örneği aynı bilgisayarda çalıştırmak için

  1. Yolun, Makecert.exe bulunduğu klasörü içerdiğinden emin olun.

  2. Visual Studio için Geliştirici Komut İstemi'ndeki örnek yükleme klasöründen Setup.bat yönetici ayrıcalıklarıyla çalıştırın. Bu, örneği çalıştırmak için gereken hizmet sertifikalarını yükler.

  3. \client\bin konumundan Client.exe başlatın. İstemci etkinliği, istemci konsol uygulamasında görüntülenir.

  4. İstemci ve hizmet iletişim kuramıyorsa bkz. WCF Örnekleri için sorun giderme İpuçları.

Örneği bilgisayarlar arasında çalıştırmak için

  1. Hizmet bilgisayarında bir dizin oluşturun. Internet Information Services (IIS) yönetim aracını kullanarak bu dizin için servicemodelsamples adlı bir sanal uygulama oluşturun.

  2. \inetpub\wwwroot\servicemodelsamples hizmet programı dosyalarını hizmet bilgisayarındaki sanal dizine kopyalayın. \bin alt dizinindeki dosyaları kopyaladığınızdan emin olun. Ayrıca Setup.bat, GetComputerName.vbs ve Cleanup.bat dosyalarını hizmet bilgisayarına kopyalayın.

  3. İstemci ikili dosyaları için istemci bilgisayarda bir dizin oluşturun.

  4. İstemci programı dosyalarını istemci bilgisayardaki istemci dizinine kopyalayın. Ayrıca Setup.bat, Cleanup.bat ve ImportServiceCert.bat dosyalarını istemciye kopyalayın.

  5. Sunucuda, yönetim ayrıcalıklarına sahip Visual Studio için Geliştirici Komut İstemi'ni açın ve komutunu çalıştırın setup.bat service. bağımsız değişkeniyle service çalıştırmaksetup.bat, bilgisayarın tam etki alanı adına sahip bir hizmet sertifikası oluşturur ve hizmet sertifikasını Service.cer adlı bir dosyaya aktarır.

  6. Web.config dosyasını, bilgisayarın tam etki alanı adıyla aynı olan yeni sertifika adını (findValueserviceCertificate> özniteliğinde<) yansıtacak şekilde düzenleyin.

  7. Service.cer dosyasını hizmet dizininden istemci bilgisayardaki istemci dizinine kopyalayın.

  8. İstemci bilgisayardaki Client.exe.config dosyasında, uç noktanın adres değerini hizmetinizin yeni adresiyle eşleşecek şekilde değiştirin.

  9. İstemcide, yönetim ayrıcalıklarına sahip Visual Studio için Bir Geliştirici Komut İstemi açın ve ImportServiceCert.bat çalıştırın. Bu, hizmet sertifikasını Service.cer dosyasından CurrentUser - Trusted Kişiler deposuna aktarır.

  10. İstemci bilgisayarda bir komut isteminden Client.exe başlatın. İstemci ve hizmet iletişim kuramıyorsa bkz. WCF Örnekleri için sorun giderme İpuçları.

Örnekten sonra temizlemek için

  • Örneği çalıştırmayı bitirdikten sonra örnekler klasöründe Cleanup.bat çalıştırın.

Not

Bu betik, bu örneği bilgisayarlar arasında çalıştırırken istemcideki hizmet sertifikalarını kaldırmaz. Bilgisayarlar arasında sertifika kullanan Windows Communication Foundation (WCF) örnekleri çalıştırdıysanız CurrentUser - Trusted Kişiler deposuna yüklenmiş hizmet sertifikalarını temizlediğinizden emin olun. Bunu yapmak için şu komutu kullanın: certmgr -del -r CurrentUser -s TrustedPeople -c -n <Fully Qualified Server Machine Name> Örneğin: certmgr -del -r CurrentUser -s TrustedPeople -c -n server1.contoso.com.

Kurulum Toplu İş Dosyası

Bu örneğe dahil edilen Setup.bat toplu iş dosyası, sunucuyu ilgili sertifikalarla yapılandırarak sunucu sertifikası tabanlı güvenlik gerektiren şirket içinde barındırılan bir uygulama çalıştırmanızı sağlar. Bu toplu iş dosyası, bilgisayarlar arasında çalışacak veya barındırılmayan bir durumda çalışacak şekilde değiştirilmelidir.

Aşağıda, toplu iş dosyalarının farklı bölümlerine ilişkin kısa bir genel bakış sağlanır, böylece bunlar uygun yapılandırmada çalıştırılacak şekilde değiştirilebilir.

  • Sunucu sertifikası oluşturuluyor.

    Setup.bat toplu iş dosyasındaki aşağıdaki satırlar kullanılacak sunucu sertifikasını oluşturur. %SERVER_NAME% değişkeni sunucu adını belirtir. Kendi sunucu adınızı belirtmek için bu değişkeni değiştirin. Bu toplu iş dosyası varsayılan olarak localhost olarak ayarlar.

    Sertifika, LocalMachine depolama konumu altında My (Personal) deposunda depolanır.

    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
    
  • Sunucu sertifikasını istemcinin güvenilen sertifika deposuna yükleme.

    Setup.bat toplu iş dosyasındaki aşağıdaki satırlar sunucu sertifikasını istemcinin güvenilen kişiler deposuna kopyalar. Makecert.exe tarafından oluşturulan sertifikalara istemci sistemi tarafından örtük olarak güvenilmediğinden bu adım gereklidir. İstemci güvenilen kök sertifikasında (örneğin, Microsoft tarafından verilen bir sertifika) köke sahip bir sertifikanız zaten varsa, istemci sertifika depoyu sunucu sertifikasıyla doldurma adımı gerekli değildir.

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