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ışı
- İlgili Yapılandırma Ayarları
- Kimlik doğrulaması
- Yetkilendirme
- Rol Tabanlı Güvenlik
İstekle güvenlik akışı
Aşağıdaki adımlar, bir istemci istekte bulunurken gerçekleşen olayların sırasını özetler:
- İstemci, IIS sunucusunda bulunan bir .aspx sayfası istemektedir.
- İstemcinin kimlik bilgileri IIS'ye geçirilir.
- IIS istemcinin kimliğini doğrular ve kimliği doğrulanmış belirteci istemcinin isteğiyle birlikte ASP.NET çalışan işlemine iletir.
- 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.
İlgili yapılandırma ayarları
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ı
- Windows kimlik doğrulaması
- Passport kimlik doğrulaması
- Varsayılan kimlik doğrulaması
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. FileAuthorizationModule
bir 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 GET
POST
) 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:
Daha fazla bilgi için aşağıdaki makaleye veya kitaplara bakın:
PRB: Request.ServerVariables("LOGON_USER") ASP.NET'da Boş Dize Döndürür
Reilly, Douglas J. Microsoft ASP.NET Uygulamalarını Tasarlama. Microsoft Press, 2001.
Esposito, Dino. ASP.NET ve ADO.NET ile Web Çözümleri Oluşturma. Microsoft Press, 2001.
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin