ASP.NET güvenliğe genel bakış

Bu makale ASP.NET güvenliğine giriş niteliğindedir; aşağıdaki Microsoft .NET Framework Sınıf Kitaplığı ad alanlarına başvurur:

  • System.Web.Security
  • System.Web.Principal

Orijinal ürün sürümü: ASP.NET
Özgün KB numarası: 306590

Özet

ASP.NET, uygulamanız için güvenlik uygulamak için size daha fazla denetim sağlar. ASP.NET güvenliği, Internet Information Services (IIS) güvenliğiyle birlikte çalışır ve ASP.NET güvenlik modelini uygulamak için kimlik doğrulama ve yetkilendirme hizmetlerini içerir. ASP.NET, hem Windows hem de Windows dışı kullanıcı hesapları için uygulayabileceğiniz rol tabanlı bir güvenlik özelliği de içerir.

Bu makale aşağıdaki bölümlere ayrılmıştır:

İstekle güvenlik akışı

Aşağıdaki adımlar, bir istemci istekte bulunurken gerçekleşen olayların sırasını özetler:

  1. İstemci, IIS sunucusunda bulunan bir .aspx sayfası istemektedir.
  2. İstemcinin kimlik bilgileri IIS'ye geçirilir.
  3. IIS istemcinin kimliğini doğrular ve kimliği doğrulanmış belirteci istemcinin isteğiyle birlikte ASP.NET çalışan işlemine iletir.
  4. IIS'den kimliği doğrulanmış belirteci ve web uygulamasının yapılandırma ayarlarını temel alan ASP.NET, isteği işleyen iş parçacığında kullanıcının kimliğine bürünülip taklit edilmeyeceğine karar verir. Active Server Pages (ASP) ile ASP.NET arasındaki ayrı bir farkta, ASP.NET artık kimliği doğrulanmış kullanıcının kimliğine varsayılan olarak bürünmez. Kimliğe bürünme özelliğini etkinleştirmek için Web.config dosyasındaki kimlik bölümünün kimliğe bürünme özniteliğini true olarak ayarlamanız gerekir.

Güvenlik akışı hakkında daha fazla bilgi için bkz. ASP.NET Veri Akışı.

ASP.NET'da kimliğe bürünme hakkında daha fazla bilgi için bkz. ASP.NET uygulamasında kimliğe bürünme uygulama.

IIS, GÜVENLIKle ilgili yapılandırma ayarlarını IIS metatabanında tutar. Ancak ASP.NET Genişletilebilir Biçimlendirme Dili (XML) yapılandırma dosyalarında güvenlik (ve diğer) yapılandırma ayarlarını korur. Bu genellikle uygulamanızın güvenlik açısından dağıtımını basitleştirse de, uygulamanızın benimsediği güvenlik modeli hem IIS metatabanı hem de ASP.NET uygulamanızın yapılandırma dosyası (Web.config) aracılığıyla doğru yapılandırmasını gerektirmektedir.

Aşağıdaki yapılandırma bölümleri ASP.NET güvenliğiyle ilgilidir:

Kimlik Doğrulama

Kimlik doğrulaması, kullanıcının adı ve parolası gibi kimlik bilgilerini aldığınız ve bu kimlik bilgilerini bir yetkiliye karşı doğruladığınız işlemdir.

ASP.NET dört kimlik doğrulama sağlayıcısı sağlar:

Forms kimlik doğrulaması

Form kimlik doğrulaması, kimliği doğrulanmamış isteklerin kullanıcıların kimlik bilgilerini yazdığı köprü metni biçimlendirme dili (HTML) formuna yönlendirildiği bir sistemi ifade eder. Kullanıcı kimlik bilgilerini sağladıktan ve formu gönderdikten sonra uygulama isteğin kimliğini doğrular ve sistem tanımlama bilgisi biçiminde bir yetkilendirme bileti verir. Bu tanımlama bilgisi kimlik bilgilerini veya kimliği yeniden almak için bir anahtar içerir. Tarayıcıdan gelen sonraki istekler otomatik olarak tanımlama bilgisini içerir.

Forms kimlik doğrulaması hakkında daha fazla bilgi için bkz. Forms Kimlik Doğrulama Sağlayıcısı.

ASP.NET'daki Form kimlik doğrulaması hakkında daha fazla bilgi için bkz. C#.NET Kullanarak ASP.NET Uygulamanızda Forms-Based Kimlik Doğrulamasını Uygulama.

Windows kimlik doğrulaması

Windows kimlik doğrulamasında IIS kimlik doğrulamasını gerçekleştirir ve kimliği doğrulanmış belirteç ASP.NET çalışan işlemine iletilir. Windows kimlik doğrulamasını kullanmanın avantajı, en az kodlama gerektirmesidir. İsteği ASP.NET teslim etmeden önce IIS'nin kimlik doğrulaması yaptığı Windows kullanıcı hesabının kimliğine bürünmek için Windows kimlik doğrulamasını kullanmak isteyebilirsiniz.

Windows kimlik doğrulaması hakkında daha fazla bilgi için bkz. WindowsAuthenticationModule Sağlayıcısı.

Passport kimlik doğrulaması

Passport kimlik doğrulaması, Microsoft'un sağladığı, üye siteler için tek bir oturum açma ve çekirdek profil hizmetleri sunan merkezi bir kimlik doğrulama hizmetidir. Genellikle, birden çok etki alanında çoklu oturum açma özelliğine ihtiyacınız olduğunda Passport kimlik doğrulaması kullanılır.

Passport kimlik doğrulaması hakkında daha fazla bilgi için bkz. Passport Kimlik Doğrulama Sağlayıcısı.

Varsayılan kimlik doğrulaması

Web uygulamanızda herhangi bir güvenlik istemediğinizde varsayılan kimlik doğrulaması kullanılır; bu güvenlik sağlayıcısı için anonim erişim gereklidir. Tüm kimlik doğrulama sağlayıcıları arasında Varsayılan kimlik doğrulaması, uygulamanız için en yüksek performansı sağlar. Bu kimlik doğrulama sağlayıcısı, kendi özel güvenlik modülünüzü kullandığınızda da kullanılır.

Yetkilendirme

Yetkilendirme, kimliği doğrulanmış kullanıcının istenen kaynaklara erişimi olup olmadığını doğrulayan işlemdir.

ASP.NET aşağıdaki yetkilendirme sağlayıcılarını sunar:

Dosya yetkilendirme

FileAuthorizationModule sınıfı dosya yetkilendirmesi gerçekleştirir ve Windows kimlik doğrulamasını kullandığınızda etkindir. FileAuthorizationModulebir kullanıcının erişimi olup olmadığını belirlemek için Windows Access Control Listeler (ACL) üzerinde denetimler gerçekleştirmekle sorumludur.

Url yetkilendirmesi

sınıfı, UrlAuthorizationModule tekdüzen kaynak tanımlayıcısı (URI) ad alanına göre yetkilendirmeyi denetleyen Tekdüzen Kaynak Bulucu (URL) yetkilendirmesi gerçekleştirir. URI ad alanları, NTFS izinlerinin kullandığı fiziksel klasörden ve dosya yollarından farklı olabilir.

UrlAuthorizationModule hem pozitif hem de olumsuz yetkilendirme onayları uygular; diğer bir ifadeyle, kullanıcılar, roller (yönetici, test ediciler ve yöneticiler gibi) ve fiiller (ve gibi GETPOST) için URI ad alanının rastgele bölümlerine seçmeli olarak erişim izni vermek veya erişimi reddetmek için modülünü kullanabilirsiniz.

ASP.NET yetkilendirme hakkında daha fazla bilgi için bkz. Yetkilendirme ASP.NET.

Rol tabanlı güvenlik

ASP.NET'daki rol tabanlı güvenlik, Önemli farklılıklar olsa da, Microsoft COM+ ve Microsoft Transaction Server'ın (MTS) kullandığı rol tabanlı güvenliğe benzer. ASP.NET'da rol tabanlı güvenlik, Windows hesapları ve gruplarıyla sınırlı değildir. Örneğin, Windows kimlik doğrulaması ve kimliğe bürünme etkinleştirildiyse, kullanıcının kimliği bir Windows kimliğidir (User.Identity.Name = "Domain\username"). Belirli rollerdeki üyelik için kimlikleri denetleyebilir ve erişimi buna göre kısıtlayabilirsiniz. Örneğin:

Visual Basic .NET kodu

If User.IsInRole("BUILTIN\Administrators") Then
    Response.Write("You are an Admin")
Else If User.IsInRole("BUILTIN\Users") then
    Response.Write("You are a User")
Else
    Response.Write("Invalid user")
End if

Visual C# .NET kodu

if ( User.IsInRole("BUILTIN\\Administrators"))
    Response.Write("You are an Admin");
else if (User.IsInRole("BUILTIN\\Users"))
    Response.Write("You are a User");
else
    Response.Write("Invalid user");

Forms kimlik doğrulaması kullanıyorsanız, roller kimliği doğrulanmış kullanıcıya atanmamış olur; bunu program aracılığıyla yapmanız gerekir. Kimliği doğrulanmış kullanıcıya rol atamak için, kimlik doğrulama modülünün olayını (bu örnekte Forms kimlik doğrulama modülüdür) kullanarak OnAuthenticate yeni GenericPrincipal bir nesne oluşturun ve bunu öğesinin User özelliğine atayın HttpContext. Aşağıdaki kod bunu gösterir:

Visual Basic .NET kodu

Public Sub Application_AuthenticateRequest(s As Object, e As EventArgs)
    If (Not(HttpContext.Current.User Is Nothing)) Then
        If HttpContext.Current.User.Identity.AuthenticationType = "Forms" Then
            Dim id as System.Web.Security.FormsIdentity = HttpContext.Current.User.Identity
            Dim myRoles(3) As String
            myRoles(0)= "managers"
            myRoles(1)= "testers"
            myRoles(2)= "developers"
            HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(id,myRoles)
        End If
    End If
End Sub

Visual C# .NET kodu

public void Application_AuthenticateRequest(Object s, EventArgs e)
{
    if (HttpContext.Current.User != null)
     {
         if (HttpContext.Current.User.Identity.AuthenticationType == "Forms" )
         {
             System.Web.Security.FormsIdentity id = HttpContext.Current.User.Identity;
             String[] myRoles = new String[3];
             myRoles[0]= "managers";
             myRoles[1]= "testers";
             myRoles[2]= "developers";
             HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(id,myRoles);
         }
    }
}

Kullanıcının belirli bir rolde olup olmadığını denetlemek ve erişimi uygun şekilde kısıtlamak için .aspx sayfalarınızda aşağıdaki kodu (veya benzerini) kullanın:

Visual Basic .NET kodu

If User.IsInRole("managers") Then
    Response.Write("You are a Manager")
Else If User.IsInRole("testers") Then
    Response.Write("You are a Tester")
Else If User.IsInRole("developers") Then
    Response.Write("You are a Developer")
End if

Visual C# .NET kodu

if (User.IsInRole("managers"))
    Response.Write("You are a Manager");
else if (User.IsInRole("testers"))
    Response.Write("You are a Tester");
else if (User.IsInRole("developers"))
    Response.Write("You are a Developer");

Rol tabanlı güvenlik hakkında daha fazla bilgi için bkz. Rol Tabanlı Güvenlik.

Başvurular

ASP.NET hakkında daha fazla genel bilgi için aşağıdaki haber grubuna bakın:

ASP.NET haber grubu

Daha fazla bilgi için aşağıdaki makaleye veya kitaplara bakın: