İngilizce dilinde oku

Aracılığıyla paylaş


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

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

Özet

ASP.NET, uygulamanız için güvenlik uygulamak için daha fazla denetim sağlar. ASP.NET güvenlik, 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 alarak, ASP.NET isteği işleyen iş parçacığında bir kullanıcının kimliğine bürünmeye 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 kimliğine 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ı içinde 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, yapılandırma dosyası (Web.config) aracılığıyla hem IIS metatabanı hem de ASP.NET uygulamanızın doğru yapılandırmasını gerektirmektedir.

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

Kimlik Doğrulaması

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:

Form kimlik doğrulaması

Forms 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'da form kimlik doğrulaması hakkında daha fazla bilgi için bkz . C#.NET Kullanarak ASP.NET Uygulamanızda Form Tabanlı Kimlik Doğrulaması Uygulama.

Windows kimlik doğrulması

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 vermeden ö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. FileAuthorizationModule , bir kullanıcının erişimi olup olmadığını belirlemek için Windows Erişim Denetim Listelerinde (ACL) denetim 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 negatif yetkilendirme onayları uygular; yani, kullanıcılar, roller (yönetici, test ediciler ve yöneticiler gibi) ve fiiller (ve gibi GET POST) için URI ad alanının rastgele bölümlerine seçmeli olarak izin 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, Microsoft COM+ ve Microsoft Transaction Server'ın (MTS) kullandığı rol tabanlı güvenliğe benzer, ancak önemli farklılıklar vardır. ASP.NET 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 rollerde üyelik için kimlikleri denetleyebilir ve erişimi buna göre kısıtlayabilirsiniz. Örneğin:

Visual Basic .NET kodu

ASP.NET (VB)
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

ASP.NET (C#)
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 (bu örnekteki Forms kimlik doğrulama modülü) olayını 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

ASP.NET (VB)
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

ASP.NET (C#)
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 buna göre kısıtlamak için .aspx sayfalarınızda aşağıdaki kodu (veya benzerini) kullanın:

Visual Basic .NET kodu

ASP.NET (VB)
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

ASP.NET (C#)
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: