Aracılığıyla paylaş


Nasıl yapılır: PrincipalPermissionAttribute Sınıfı ile Erişimi Kısıtlama

Windows etki alanı bilgisayarındaki kaynaklara erişimi denetlemek temel bir güvenlik görevidir. Örneğin, bordro bilgileri gibi hassas verileri yalnızca belirli kullanıcıların görüntüleyebilmesi gerekir. Bu konuda, kullanıcının önceden tanımlanmış bir gruba ait olmasını talep ederek bir yönteme erişimi kısıtlama açıklanmaktadır. Çalışan bir örnek için bkz . Hizmet İşlemlerine Erişimi Yetkilendirme.

Görev iki ayrı yordamdan oluşur. İlki grubu oluşturur ve kullanıcılarla doldurur. İkincisi, grubu belirtmek için sınıfını uygular PrincipalPermissionAttribute .

Windows grubu oluşturmak için

  1. Bilgisayar Yönetimi konsolunu açın.

  2. Sol panelde Yerel Kullanıcılar ve Gruplar'a tıklayın.

  3. Gruplar'a sağ tıklayın ve Yeni Grup'a tıklayın.

  4. Grup Adı kutusuna yeni grup için bir ad yazın.

  5. Açıklama kutusuna yeni grubun açıklamasını yazın.

  6. Gruba yeni üyeler eklemek için Ekle düğmesine tıklayın.

  7. Kendinizi gruba eklediyseniz ve aşağıdaki kodu test etmek istiyorsanız, bilgisayarda oturumunuzu kapatmanız ve gruba dahil olmak için yeniden oturum açmanız gerekir.

Kullanıcı üyeliği talep etmek için

  1. Uygulanan hizmet sözleşmesi kodunu içeren Windows Communication Foundation (WCF) kod dosyasını açın. Sözleşme uygulama hakkında daha fazla bilgi için bkz . Hizmet Sözleşmelerini Uygulama.

  2. özniteliğini PrincipalPermissionAttribute belirli bir grupla sınırlandırılması gereken her yönteme uygulayın. Action özelliğini olarakDemand, özelliğini ise Role grubun adına ayarlayın. Örneğin:

    // Only members of the CalculatorClients group can call this method.
    [PrincipalPermission(SecurityAction.Demand, Role = "CalculatorClients")]
    public double Add(double a, double b)
    {
        return a + b;
    }
    
    ' Only members of the CalculatorClients group can call this method.
    <PrincipalPermission(SecurityAction.Demand, Role:="CalculatorClients")> _
    Public Function Add(ByVal a As Double, ByVal b As Double) As Double
        Return a + b
    End Function
    
    

    Not

    Özniteliğini PrincipalPermissionAttribute bir sözleşmeye uygularsanız bir SecurityException oluşturulur. Özniteliği yalnızca yöntem düzeyinde uygulayabilirsiniz.

Bir Yönteme Erişimi Denetlemek için Sertifika Kullanma

İstemci kimlik bilgisi türü bir sertifikaysa bir yönteme erişimi denetlemek için sınıfını da kullanabilirsiniz PrincipalPermissionAttribute . Bunu yapmak için sertifikanın konusuna ve parmak izine sahip olmanız gerekir.

Bir sertifikayı özelliklerini incelemek için bkz . Nasıl yapılır: MMC Ek Bileşeni ile Sertifikaları Görüntüleme. Parmak izi değerini bulmak için bkz . Nasıl yapılır: Sertifikanın Parmak İzini Alma.

Sertifika kullanarak erişimi denetlemek için

  1. sınıfını PrincipalPermissionAttribute erişimi kısıtlamak istediğiniz yönteme uygulayın.

  2. özniteliğinin eylemini olarak SecurityAction.Demandayarlayın.

  3. Name özelliğini konu adından ve sertifikanın parmak izinden oluşan bir dize olarak ayarlayın. Aşağıdaki örnekte gösterildiği gibi iki değeri noktalı virgül ve boşlukla ayırın:

    // Only a client authenticated with a valid certificate that has the
    // specified subject name and thumbprint can call this method.
    [PrincipalPermission(SecurityAction.Demand,
        Name = "CN=ReplaceWithSubjectName; 123456712345677E8E230FDE624F841B1CE9D41E")]
    public double Multiply(double a, double b)
    {
        return a * b;
    }
    
    ' Only a client authenticated with a valid certificate that has the 
    ' specified subject name and thumbprint can call this method.
    <PrincipalPermission(SecurityAction.Demand, Name:="CN=ReplaceWithSubjectName; 123456712345677E8E230FDE624F841B1CE9D41E")> _
    Public Function Multiply(ByVal a As Double, ByVal b As Double) As Double
        Return a * b
    End Function
    
  4. PrincipalPermissionMode özelliğini UseAspNetRoles aşağıdaki yapılandırma örneğinde gösterildiği gibi olarak ayarlayın:

    <behaviors>  
      <serviceBehaviors>  
      <behavior name="SvcBehavior1">  
      <serviceAuthorization principalPermissionMode="UseAspNetRoles" />  
      </behavior>  
      </serviceBehaviors>  
    </behaviors>  
    

    Bu değeri olarak ayarlamak UseAspNetRoles , özelliğinin NamePrincipalPermissionAttribute dize karşılaştırması gerçekleştirmek için kullanılacağını gösterir. Bir sertifika istemci kimlik bilgisi olarak kullanıldığında, WCF varsayılan olarak sertifika ortak adını ve parmak izini noktalı virgülle birleştirir ve istemcinin birincil kimliği için benzersiz bir değer oluşturur. UseAspNetRoles Hizmette PrincipalPermissionMode olarak ayarlandığında, bu birincil kimlik değeri, kullanıcının erişim haklarını belirlemek için özellik değeriyle Name karşılaştırılır.

    Alternatif olarak, şirket içinde barındırılan PrincipalPermissionMode bir hizmet oluştururken aşağıdaki kodda gösterildiği gibi kodda özelliğini ayarlayın:

    ServiceHost myServiceHost = new ServiceHost(typeof(Calculator), baseUri);
    ServiceAuthorizationBehavior myServiceBehavior =
        myServiceHost.Description.Behaviors.Find<ServiceAuthorizationBehavior>();
    myServiceBehavior.PrincipalPermissionMode =
        PrincipalPermissionMode.UseAspNetRoles;
    
    Dim myServiceBehavior As ServiceAuthorizationBehavior
    myServiceBehavior = _
       myServiceHost.Description.Behaviors.Find(Of ServiceAuthorizationBehavior)()
    myServiceBehavior.PrincipalPermissionMode = _
       PrincipalPermissionMode.UseAspNetRoles
    

Ayrıca bkz.