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.
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 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.
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.
İlgili yapılandırma ayarları
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ı, 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.
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.
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.
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.
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:
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 GETPOST) 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");
Bu, bir web formu aracılığıyla ziyaretçilerin kimliğini doğrulama tekniklerini keşfedecek, bölüme erişim yetkisi veren bir dizi öğreticinin ilk öğreticisi... (C#)
Bu makalede, kullanıcıları depolamak için veritabanı kullanarak ASP.NET uygulamalarında form tabanlı kimlik doğrulamasının nasıl uygulandığı gösterilmektedir.
Bu bölümde, bazı sayfaların yalnızca oturum açan kişiler tarafından kullanılabilmesi için web sitenizin güvenliğini nasıl sağladığınız gösterilmektedir. (Ayrıca sayfaların nasıl oluşturulacağını da göreceksiniz...
Bu öğretici serisi, bir oturum açma formu (form kimlik doğrulaması) kullanarak kullanıcıların kimliğini doğrulama ve tek tek sayfalara erişim yetkisi verme tekniklerini inceler...
MVC uygulamanızdaki belirli sayfaları parolayla korumak için [Authorize] özniteliğini kullanmayı öğrenin. Web Sitesi Yönetimi'ni de kullanmayı öğrenirsiniz... (C#)