• Çar. May 8th, 2024

Arif GÖKÇE

Senior Software Engineer

Authentication and Authorization in ASP.NET Core

Byarifgokce

Nis 22, 2024
Authentication and AuthorizationAuthentication and Authorization

Authentication and authorization her web uygulamasının olmazsa olmaz bileşenleridir ve kullanıcılar için güvenliği ve uygun erişim kontrolünü sağlarlar. ASP.NET Core bağlamında, bu kavramlar kaynakları korumak ve kullanıcı izinlerini belirlemek için hayati öneme sahiptir. Bu kapsamlı rehber, ASP.NET Core’da authentication ve authorization ile ilgili çeşitli yönleri keşfetmekte ve bu mekanizmaları etkili bir şekilde nasıl uygulayabileceğinize dair derinlemesine bir anlayış sağlamaktadır.

1. Introduction to Authentication and Authorization

Authentication, bir kullanıcının kimliğini doğrulama sürecidir ve bu süreç, kullanıcının iddia ettiği kişi olduğundan emin olmayı amaçlar. Bu genellikle bir kullanıcı adı ve şifre gibi kimlik bilgileri sunularak ve bu bilgilerin bir veritabanı veya harici bir authentication sağlayıcısı gibi güvenilir bir kaynakla doğrulanması suretiyle gerçekleştirilir. Kimlik doğrulandıktan sonra kullanıcıya bir kimlik atanır ve bu kimlik, sonraki authorization kontrolleri için kullanılır.

Öte yandan authorization, bir kullanıcının uygulama içinde hangi işlemleri gerçekleştirebileceğinin belirlenmesi sürecidir. Bu süreç, kimlik doğrulanmış kullanıcının belirli bir kaynağa erişme veya belirli bir işlemi gerçekleştirme hakkına sahip olup olmadığını kontrol etmeyi içerir. Yetkilendirme, erişim kontrolünü uygulamak ve hassas verileri veya işlevselliği korumak için hayati önem taşır.

ASP.NET Core’da authentication  ve authorization, ara yazılım bileşenleri, nitelikler ve yapılandırma seçenekleri kombinasyonu aracılığıyla yönetilir. Çerçeve, bu güvenlik mekanizmalarını uygulamak için esnek ve genişletilebilir bir altyapı sağlar, böylece developer uygulamalarının gereksinimlerine göre çeşitli kimlik doğrulama yöntemlerini ve yetkilendirme politikaları arasından seçim yapabilirler.

ASP.NET Core'da authentication

2. Authentication in ASP.NET Core

ASP.NET Core’da Authentication, authentication yöntemleri etrafında şekillenir. Bir authentication yöntemleri, kullanıcıları doğrulamak için kullanılan belirli bir yöntem veya protokolü temsil eder. ASP.NET Core, ticketdan çıkar çıkmaz çerez kimlik doğrulaması, JWT taşıyıcı kimlik doğrulaması, OAuth ve OpenID Connect gibi harici kimlik doğrulama sağlayıcıları dahil olmak üzere çeşitli kimlik doğrulama yöntemlerini destekler.

Kimlik Doğrulama Yöntemlerini Kavram

Kimlik doğrulama şemaları, uygulamanın başlangıç sınıfında AddAuthentication metodu kullanılarak kaydedilir. Bu metod, bir veya daha fazla kimlik doğrulama şemasını ve ilgili seçeneklerini belirtmenize olanak tanır. Örneğin, çerez kimlik doğrulamasını etkinleştirmek için AddCookie uzantı metodunu kullanabilirsiniz:

services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
    .AddCookie(options =>
    {
        // Configure cookie options
    });

Her bir kimlik doğrulama yönteminin, uygulamanızın ihtiyaçlarına uyacak şekilde özelleştirilebilen kendi seçenekleri bulunmaktadır. Bu seçenekler arasında çerezin süresi dolma, kayan süre dolma, kimlik doğrulama uç noktaları ve daha fazlası ile ilgili ayarlar bulunur. Kimlik doğrulama yöntemlerini yapılandırarak, kimlik doğrulama sürecinin nasıl işlediğini ve kullanıcı kimliklerinin nasıl kurulduğunu tanımlarsınız.

Configuring Cookie Authentication

Cookie authentication, ASP.NET Core’da en yaygın ve basit kimlik doğrulama yöntemlerinden biridir. Kullanıcının kimlik doğrulama bilgilerini, bir oturum kimliği veya şifrelenmiş bir simge gibi, saklamak için HTTP çerezlerine dayanır. Çerez kimlik doğrulama ara yazılımı, çerezlerin oluşturulması ve doğrulanması sürecini yönetir, bu da kullanıcıların birden fazla istek boyunca kimlik doğrulamasının korunmasını sağlar.

Çerez kimlik doğrulamasını yapılandırmak için, CookieAuthenticationDefaults.AuthenticationScheme olarak kimlik doğrulama yöntemini belirtmeniz ve çerez adı, giriş yolu ve kimlik doğrulama uç noktası gibi gerekli seçenekleri sağlamanız gerekmektedir. İşte bir örnek:

services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
    .AddCookie(options =>
    {
        options.Cookie.Name = "MySiteCookie";
        options.LoginPath = "/Account/Login";
    });

Bu örnekte, cookie authentication yöntemi “MySiteCookie” adlı yöntemi kullanacak şekilde yapılandırılmıştır ve kimlik doğrulanmadan korunan bir pathe erişmeye çalışan kullanıcıları “/Account/Login” sayfasına yönlendirir. Çerezin süresinin dolması ve session süre dolması gibi cookie authentication çeşitli yönlerini özelleştirmenize olanak tanır.

Implementing Claim-Based Authentication

Claim-based authentication, claim kavramı etrafında dönen esnek ve güçlü bir kimlik doğrulama mekanizmasıdır. Bir claim, kullanıcının adı, e-posta adresi veya rolü gibi kullanıcı hakkında bir bilgi parçasını temsil eder. Claim’lar kullanılarak, kullanıcının kimliğini ek verilerle kolayca genişletebilir ve bu claim’lara dayanarak yetkilendirme kararları alabilirsiniz.

ASP.NET Core, claim-based authentication ClaimsIdentity ve ClaimsPrincipal sınıfları kullanılarak gerçekleştirilir. ClaimsIdentity, bir kullanıcıyla ilişkilendirilmiş claim’lerin bir koleksiyonunu temsil ederken, ClaimsPrincipal kullanıcının kimliğini bütün olarak temsil eder. Bir kullanıcı kimlik doğrulandığında, claim’leri bir ClaimsPrincipal içinde saklanır ve bu da mevcut isteğin HttpContext.User özelliğine eklenir.

Claim-based authentication uygulamak için, ilgili claim’lerle bir ClaimsIdentity nesnesi oluşturmanız ve doldurmanız gerekmektedir. Bu, genellikle özel bir kimlik doğrulama işleyicisinde olduğu gibi kimlik doğrulama süreci sırasında yapılabilir. İşte bir kullanıcı adı claimi ile ClaimsIdentity oluşturma örneği:

var claims = new List<Claim>
{
    new Claim(ClaimTypes.Name, "Alice")
};

var identity = new ClaimsIdentity(claims, "MyAuthenticationScheme");

var principal = new ClaimsPrincipal(identity);

await HttpContext.SignInAsync(principal);

In this example, the ClaimsIdentity is created with a single claim representing the user's name. The identity is then used to create a ClaimsPrincipal, which is ultimately signed into the current request's HttpContext using the SignInAsync method. Once signed in, the user's claims are accessible throughout the application, allowing for fine-grained authorization checks.

Authentication ve Claim Tabanlı Authentication

Authentication ve claim tabanlı authentication’a ek olarak, ASP.NET Core aynı zamanda dış authentication sağlayıcıları için de destek sunmaktadır. Dış authentication, kullanıcıların Google, Facebook, Twitter ve Microsoft gibi popüler platformlardaki mevcut hesaplarını kullanarak uygulamanıza giriş yapmalarını sağlar. Bu, kullanıcılar için authentication sürecini basitleştirir ve ayrı kimlik bilgileri oluşturma ihtiyacını ortadan kaldırır.

Dış authentication’ı etkinleştirmek için, istenen authentication sağlayıcısını yapılandırmanız ve uygulamanızın başlangıç sınıfında kaydetmeniz gerekmektedir. Bu, sağlayıcının geliştirici portalından gerekli müşteri kimlikleri ve sırlarını elde etmeyi ve bunları authentication seçeneklerinde belirtmeyi içerir. İşte Google authentication’ını yapılandırma örneği:

services.AddAuthentication()
.AddGoogle(options =>
{
options.ClientId = "YOUR_GOOGLE_CLIENT_ID";
options.ClientSecret = "YOUR_GOOGLE_CLIENT_SECRET";
});

Bu örnekte, Google authentication’ını yapılandırmak için AddGoogle uzantı metodu kullanılmaktadır. ClientId ve ClientSecret özellikleri, Google geliştirici konsolundan elde edilen değerlere ayarlanmıştır. Yapılandırıldıktan sonra, kullanıcılar “Google ile Giriş Yap” butonuna tıklayarak ve authentication akışını takip ederek Google hesapları ile uygulamanıza giriş yapabilirler.

JWT Bearer Authentication ile API’leri Güvence Altına Alma

ASP.NET Core, JSON Web Token’ları (JWT) ve JWT bearer authentication yöntemini kullanarak API’leri güvence altına almak için yerleşik destek sağlar. JWT’ler, kullanıcı hakkında ve onların izinleri hakkında bilgi içeren bağımsız token’lardır. Bir JWT’nin bütünlüğünü ve doğruluğunu doğrulayarak, içerdiği claim’leri güvenilir bulabilir ve API isteklerini authenticate edebilirsiniz.

JWT bearer authentication’ı etkinleştirmek için, authentication yöntemini yapılandırmanız ve token doğrulama parametreleri ve imza atan issuer anahtarı gibi gerekli seçenekleri sağlamanız gerekmektedir. İşte JWT bearer authentication’ını yapılandırma örneği:

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(options =>
    {
        options.TokenValidationParameters = new TokenValidationParameters
        {
            ValidateIssuer = true,
            ValidateAudience = true,
            ValidateIssuerSigningKey = true,
            ValidIssuer = "YOUR_ISSUER",
            ValidAudience = "YOUR_AUDIENCE",
            IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("YOUR_SIGNING_KEY"))
        };
    });

Bu örnekte, JWT bearer authentication’ı yapılandırmak için AddJwtBearer uzantı metodu kullanılmaktadır. TokenValidationParameters nesnesi, issuer’ı, audience’ı ve issuer’ın imza anahtarını doğrulama gibi gerekli doğrulama kuralları ile ayarlanmıştır. Yer tutucu değerleri, JWT kurulumunuza özgü kendi değerlerinizle değiştirmeniz gerekmektedir.

JWT bearer authentication etkinleştirildiğinde, API uç noktaları ilgili kontrolör veya aksiyona [Authorize] niteliği uygulanarak korunabilir. Bu, yalnızca geçerli ve authenticate edilmiş JWT’ler içeren isteklerin korunan kaynaklara erişimine izin verildiğini garanti eder.

3. ASP.NET Core da Authorization

  1. ASP.NET Core’da yetkilendirme, esas olarak [Authorize] niteliğinin kullanımıyla kontrol edilir. Bu nitelik, uygulamanızın belirli bileşenlerine erişimi kısıtlamak için kontrolör veya aksiyon seviyesinde uygulanabilir. Varsayılan olarak, [Authorize] niteliği yalnızca kimlik doğrulanmış kullanıcıların korunan kaynağa erişimine izin verir.

AuthorizeAttribute’un Rolü [Authorize] niteliği, ASP.NET Core’da erişim kontrolünü uygulamak için güçlü bir araçtır. Bir kontrolöre veya aksiyona uygulandığında, çerçevenin yetkilendirme sürecini tetikler, bu süreç mevcut kullanıcının kimlik doğrulamasını ve istenen kaynağa erişim için gerekli izinlere sahip olup olmadığını doğrular.

Varsayılan olarak, [Authorize] niteliği rolleri veya claim’leri ne olursa olsun kimlik doğrulanmış kullanıcılara erişim izni verir. Ancak, ek parametreler belirterek veya diğer yetkilendirme nitelikleri ile birleştirerek davranışını özelleştirebilirsiniz.

Örneğin, yalnızca yöneticilere erişimi kısıtlamak için [Authorize(Roles = “Admin”)] niteliğini kullanabilirsiniz. Bu, sadece “Admin” rolüne sahip kullanıcıların korunan kaynağa erişebilmesini sağlar.

Restricting Access with Policies / Erişimi Politikalarla Kısıtlama


Erişimi Politikalarla Kısıtlama [Authorize] niteliği erişimi kısıtlamak için basit bir yol sunarken, ASP.NET Core ayrıca daha gelişmiş yetkilendirme politikalarını da destekler. Yetkilendirme politikaları, bir kullanıcının belirli bir eylemi gerçekleştirme yetkisine sahip olup olmadığını belirlemek için detaylı kurallar tanımlamanıza olanak tanır.

Yetkilendirme politikalarını kullanmak için, bunları uygulamanızın başlangıç sınıfında AddAuthorization metodu kullanarak tanımlamanız gerekmektedir.

services.AddAuthorization(options =>
{
    options.AddPolicy("AdminOnly", policy =>
    {
        policy.RequireRole("Admin");
    });
});


Bu örnekte, kullanıcının bu politika tarafından korunan kaynaklara erişebilmesi için “Admin” rolüne sahip olmasını gerektiren “AdminOnly” politikası tanımlanmıştır. Tanımlandıktan sonra, politika [Authorize(Policy = “AdminOnly”)] niteliği kullanılarak uygulanabilir.

Yetkilendirme politikaları ayrıca claim’ler, özel gereksinimler veya koşulların bir kombinasyonu gibi diğer faktörlere dayanabilir. Bu, çeşitli kullanıcı özelliklerine veya uygulamaya özgü kurallara dayanan karmaşık erişim kontrol mantığını uygulamanıza olanak tanır.

Implementing Role-Based Authorization / Rol Tabanlı Yetkilendirme Uygulama

Rol tabanlı yetkilendirme, uygulamalarda erişimi kontrol etmek için yaygın bir yaklaşımdır. Kullanıcılara roller atanmasını ve bu rollere izinler verilmesini içerir. ASP.NET Core’da, rol tabanlı yetkilendirme, yerleşik rol tabanlı kimlik doğrulama sistemini kullanarak veya Active Directory veya Azure AD gibi dış bir kimlik sağlayıcı ile entegre edilerek uygulanabilir.

Rol tabanlı yetkilendirmeyi kullanmak için, kullanıcılara roller atamanız ve kimlik doğrulama sırasında kullanıcının rollerini alacak uygun kimlik doğrulama yöntemini yapılandırmanız gerekir. Bu, uygulamanızın başlangıç sınıfında AddRoles ve AddRoleManager metodları kullanılarak yapılabilir.

Roller kullanıcılara atandığında, [Authorize(Roles = “Admin”)] niteliğini veya User.IsInRole(“Admin”) metodunu kullanarak bir kullanıcının belirli bir role sahip olup olmadığını kontrol edebilirsiniz. Bu, kullanıcının rolüne dayanarak belirli kaynaklara veya eylemlere erişimi kısıtlamanızı sağlar.

Authentication and Authorization Birleştirme

Authentication ve authorization, kullanıcıların hem tanımlandığı hem de kaynaklara uygun erişim izni aldığından emin olmak için el ele çalışır. ASP.NET Core’da, authentication ve authorization süreçleri sorunsuz bir şekilde entegre edilmiştir, bu da onları uygulamanızda kolayca birleştirmenizi sağlar.

Bir kullanıcı authentication edildiğinde, kimlikleri ve rolleri içeren bir ClaimsPrincipal nesnesinde kimlikleri saklanır. Bu ClaimsPrincipal, kullanıcının bir kaynağa erişim için gerekli izinlere sahip olup olmadığını belirlemek için authorization süreci sırasında kullanılır.

Bir kontrolör veya aksiyona [Authorize] niteliğini uygulayarak, authentication ve authorization süreçlerini tek bir adımda tetiklersiniz. Authentication ara yazılımı kullanıcının kimliğini doğrular, authorization ara yazılımı ise kullanıcının rollerine veya claim’lerine dayanarak yetkili olup olmadığını kontrol eder.

Bu entegre yaklaşım, güvenli uygulamaların geliştirilmesini basitleştirir ve authentication ve authorization’ın uygulamanın bileşenleri arasında tutarlı bir şekilde uygulanmasını sağlar.

4. Authentication ve Authorization’ı Özelleştirme

  1. ASP.NET Core, zengin bir yerleşik authentication ve authorization mekanizmaları seti sunarken, belirli gereksinimlerinize uygun bu süreçleri özelleştirmeniz gereken senaryolar olabilir. Neyse ki, çerçeve, özel authentication işleyicileri oluşturmanıza, özel authorization filtreleri uygulamanıza ve varsayılan kimlik yönetim yeteneklerini genişletmenize olanak tanıyan genişletilebilirlik noktaları sunar.

Özel Authentication İşleyicileri Oluşturma Özel authentication işleyicileri, yerleşik authentication şemalarının ötesine geçen authentication mantığını uygulama yolunu sağlar. Özel bir authentication işleyicisi oluşturarak, dış authentication sağlayıcılarıyla entegrasyon yapabilir, özel authentication protokolleri uygulayabilir veya authentication süreci sırasında ek doğrulama adımları ekleyebilirsiniz.

Özel bir authentication işleyicisi oluşturmak için, IAuthenticationHandler arayüzünü uygulamanız veya AuthenticationHandler<TOptions> temel sınıfından türetmeniz gerekir. Bu, authentication isteklerini işlemek, yetkisiz isteklere meydan okumak ve authentication sonucunu işlemek için gerekli yöntemleri geçersiz kılmanıza olanak tanır.

Örneğin, kullanıcıları özel bir token tabanlı authentication şeması kullanarak authenticate etmek için özel bir authentication işleyicisi oluşturabilirsiniz:

public class CustomTokenAuthenticationHandler : AuthenticationHandler<CustomTokenAuthenticationOptions>
{
    protected override Task<AuthenticateResult> HandleAuthenticateAsync()
    {
        // Custom authentication logic
    }
}

Bu örnekte, özel token tabanlı authentication mantığını uygulamak için HandleAuthenticateAsync metodu geçersiz kılınmıştır. CustomTokenAuthenticationOptions sınıfı, authentication yöntemini yapılandırmak için gerekli seçenekleri sağlar.

Özel authentication işleyicisi uygulandıktan sonra, AddAuthentication metodu kullanılarak uygulamanızın başlangıç sınıfında kaydedilebilir:

services.AddAuthentication()
    .AddScheme<CustomTokenAuthenticationOptions, CustomTokenAuthenticationHandler>("CustomToken", options => { });


Bu örnekte, “CustomToken” adlı özel authentication yöntemini kaydetmek ve özel authentication işleyicisiyle ilişkilendirmek için AddScheme metodu kullanılmıştır.

Özel Authorization Filtreleri Uygulama

Authorization filtreleri, ASP.NET Core’da authorization sürecini özelleştirmenize olanak tanıyan başka bir genişletilebilirlik noktasıdır. Authorization filtreleri, kontrolör veya aksiyon çağrılmadan önce çalıştırılır, bu da belirli koşullara göre ek authorization kontrolleri gerçekleştirmenize veya authorization davranışını değiştirmenize olanak tanır.

Özel bir authorization filtresi uygulamak için, IAuthorizationFilter arayüzünü uygulayan veya AuthorizeAttribute temel sınıfından türeyen bir sınıf oluşturmanız gerekmektedir. Bu, özel authorization mantığını gerçekleştirmek için gerekli yöntemleri geçersiz kılmanıza olanak tanır.

Örneğin, mevcut kullanıcının belirli bir claim’e sahip olup olmadığını kontrol etmek için özel bir authorization filtrosu oluşturabilirsiniz:

public class ClaimAuthorizationFilter : IAuthorizationFilter
{
    private readonly string _claimType;
    private readonly string _claimValue;

    public ClaimAuthorizationFilter(string claimType, string claimValue)
    {
        _claimType = claimType;
        _claimValue = claimValue;
    }

    public void OnAuthorization(AuthorizationFilterContext context)
    {
        if (!context.HttpContext.User.HasClaim(_claimType, _claimValue))
        {
            context.Result = new ForbidResult();
        }
    }
}

Bu örnekte, mevcut kullanıcının belirtilen tip ve değere sahip bir claim’e sahip olup olmadığını kontrol etmek için OnAuthorization metodu geçersiz kılınmıştır. Eğer claim mevcut değilse, erişimin yasaklandığını belirten bir ForbidResult döndürülür.

Özel authorization filtrenizi uygulamak için, doğrudan bir kontrolör veya aksiyona [ServiceFilter] niteliği kullanarak uygulayabilir veya uygulamanızın başlangıç sınıfında küresel olarak kaydedebilirsiniz:

services.AddControllers(options =><br>{<br>options.Filters.Add(new ClaimAuthorizationFilter("Role", "Admin"));<br>});

Bu örnekte, ClaimAuthorizationFilter tüm kontrolörlere uygulanacak şekilde küresel bir filtre olarak kaydedilmiştir. Bu, her istek için özel yetkilendirme mantığının uygulanmasını sağlar.

Identity ve User Management Genişletme

ASP.NET Core, kullanıcı yönetimi, rol yönetimi ve çeşitli kimlik doğrulama ve yetkilendirme özellikleri içeren sağlam bir kimlik sistemine sahiptir. Ancak, uygulamanızın özel gereksinimlerine uyması için varsayılan kimlik sistemini genişletmeniz gereken durumlar olabilir.

Varsayılan kimlik sistemini genişletmek için, yerleşik IdentityUser ve IdentityRole sınıflarından türeyen özel kullanıcı ve rol sınıfları oluşturabilirsiniz. Bu, kullanıcı ve rol varlıklarına ek özellikler, yöntemler veya ilişkiler eklemenize olanak tanır.

public class ApplicationUser : IdentityUser<br>{<br>public string FullName { get; set; }<br>public DateTime BirthDate { get; set; }<br>}

Bu örnekte, ApplicationUser sınıfı IdentityUser’dan türetilmiştir ve “FullName” (Tam Adı) ve “BirthDate” (Doğum Tarihi) olmak üzere iki ek özellik eklenmiştir. Bu özellikler, kullanıcı hakkında ek bilgileri depolamak için kullanılabilir.

Özel kullanıcı sınıfını kullanmak için, uygulamanızın DbContext’ini bu sınıfı içerecek şekilde güncellemeniz gerekmektedir:

public class ApplicationDbContext : IdentityDbContext&lt;ApplicationUser><br>{<br>// DbContext configuration<br>}

Kimlik sistemi genişletmenin yanı sıra, özel kullanıcı mağazaları ve rol mağazaları uygulayarak kullanıcı yönetimi ve rol yönetimi işlevselliğini de özelleştirebilirsiniz. Bu, kullanıcı ve rol verilerini farklı veri kaynaklarında saklamanıza veya mevcut kullanıcı yönetim sistemleriyle entegrasyon sağlamanıza olanak tanır. Bu özelleştirmeler, uygulamanızın özel gereksinimlerine daha iyi uyum sağlamasına ve daha esnek bir yapı sunmasına yardımcı olabilir.

5. Authentication ve Authorization İçin En İyi Uygulamalar

Etkili authentication ve authorization uygulamak, uygulamanızın güvenliği ve güvenilirliğini sağlamak için en iyi uygulamaları takip etmeyi gerektirir. Bu uygulamalara bağlı kalarak, güvenlik açıklarının riskini azaltabilir, kullanıcı verilerini koruyabilir ve sorunsuz bir kullanıcı deneyimi sağlayabilirsiniz.

İki Faktörlü Authentication Uygulama

İki faktörlü authentication (2FA), kullanıcıların ek bir doğrulama sağlamasını gerektirerek authentication sürecine ek bir güvenlik katmanı ekler; bu genellikle tek seferlik bir şifre veya biyometrik bir faktör şeklinde olur. 2FA uygulamak, özellikle hassas uygulamalar veya gizli bilgileri işleyen uygulamalar için yetkisiz erişim riskini önemli ölçüde azaltabilir.

ASP.NET Core, iki faktörlü authentication için yerleşik destek sağlar, bu da bu özelliği uygulamanızda kolayca etkinleştirmenizi sağlar. Uygun authentication sağlayıcılarını ve seçeneklerini yapılandırarak, kullanıcıların giriş sürecinde ikinci bir faktör sağlamasını talep edebilirsiniz.

İki faktörlü authentication uygulamak için, SMS, e-posta veya authenticator uygulamaları gibi istediğiniz authentication sağlayıcılarını yapılandırmanız ve uygulamanızın başlangıç sınıfında kaydetmeniz gerekir. Ayrıca, mesaj şablonları veya issuer imza anahtarı gibi gerekli seçenekleri de yapılandırmanız gerekmektedir.

İki faktörlü authentication’ı etkinleştirmekle, kullanıcı hesaplarını, kimlik bilgileri tehlikeye girmiş olsa bile, yetkisiz erişime karşı koruyacak ek bir güvenlik katmanı sağlarsınız.

Ortak Güvenlik Açıklarına Karşı Korunma

Uygulamanızda authentication ve authorization uygularken, ortak güvenlik açıklarının farkında olmak ve bunları önlemek için uygun önlemleri almak hayati önem taşır. Bu açıkları anlayarak ve güvenlik en iyi uygulamalarını takip ederek, kullanıcı verilerinin bütünlüğünü ve gizliliğini sağlayabilirsiniz.

Authentication ve authorization uygulanırken dikkate alınması gereken bazı ortak güvenlik açıkları şunlardır:

  • Cross-Site Scripting (XSS): XSS saldırılarına karşı korunmak için kullanıcı girişlerini uygun şekilde kodlayın ve HTML veya JavaScript’te işlemeden önce verileri doğrulayın.
  • Cross-Site Request Forgery (CSRF): Kimlik doğrulanmış kullanıcılar adına yetkisiz eylemler gerçekleştirmesini önlemek için anti-forgery token’ları gibi CSRF koruma mekanizmaları uygulayın.
  • Brute-Force Saldırıları: Kullanıcı kimlik bilgilerini tahmin etmeye çalışan brute-force saldırılarına karşı korunmak için hesap kilitlenme politikaları ve hız sınırlamaları uygulayın.
  • Session Management: Oturum kaçırma veya oturum sabitleme saldırılarını önlemek için oturum zaman aşımları, güvenli çerez özellikleri ve oturum yeniden oluşturma gibi güvenli oturum yönetimi tekniklerini kullanın.
  • Password Storage: Şifre çatlatma girişimlerine karşı korumak için güçlü karma algoritmaları, tuzlama ve iterasyon sayılarını kullanarak şifreleri güvenli bir şekilde saklayın.

Bu açıkları ele alarak ve güvenlik en iyi uygulamalarını takip ederek, yetkisiz erişim, veri ihlalleri ve diğer güvenlik olaylarının riskini en aza indirebilirsiniz.

Authentication ve Authorization Hatalarını Yönetme

Authentication ve authorization ile çalışırken, hataları zarif bir şekilde ele almak ve kullanıcılara anlamlı geri bildirimler sağlamak önemlidir. Doğru hata yönetimi, kullanıcı verilerini korumaya yardımcı olabilir, kullanıcının uygulamanıza olan güvenini sürdürebilir ve sorun gidermeyi basitleştirebilir.

Bir authentication veya authorization hatası meydana geldiğinde, geçersiz kullanıcı adı veya yetersiz izinler gibi, kullanıcıya sorunu çözme yolunda rehberlik eden açık ve öz hata mesajları sağlamak önemlidir. Hata mesajlarında hassas bilgilerin ifşa edilmesinden kaçının ve tutarlılık ve açıklık sağlamak için standartlaştırılmış bir hata formatı kullanmayı düşünün.

Ayrıca, authentication ve authorization başarısızlıklarını izlemek için hata kaydı ve izleme uygulamayı düşünün. Bu, potansiyel güvenlik tehditlerini tespit etmenize, sorunları gidermenize ve herhangi bir güvenlik açığı veya yanlış yapılandırmayı proaktif bir şekilde ele almanıza yardımcı olabilir.

Güvenlik için Monitoring ve Loglama

Monitoring ve loglama, uygulamanızın güvenliğini sürdürmede hayati bir rol oynar. Authentication ve authorization etkinliklerini izleyerek şüpheli davranışları tespit edebilir, potansiyel güvenlik ihlallerini belirleyebilir ve riskleri azaltacak uygun önlemleri alabilirsiniz.

Güvenlik izlemesi ve loglamayı uygulamak, başarısız giriş girişimleri, yetkisiz erişim teşebbüsleri veya kullanıcı izinlerindeki değişiklikler gibi ilgili güvenlik olaylarını yakalamayı ve analiz etmeyi içerir. Bu, güvenlik bilgi ve olay yönetimi (SIEM) araçları, günlük toplama platformları veya özel kayıt çözümleri kullanılarak yapılabilir.

Authentication ve authorization etkinliklerini monitoring ederek, kalıpları tanımlayabilir, anomalileri tespit edebilir ve potansiyel güvenlik olaylarına proaktif bir şekilde yanıt verebilirsiniz. Bu, şüpheli IP adreslerini engelleme, kullanıcılara yetkisiz erişim girişimleri hakkında bilgilendirme veya riskleri azaltmak için otomatik yanıtlar tetikleme gibi düzeltici önlemler almanızı sağlar.

6. ASP.NET Core’da Multi-Tenant Authentication

Multi-tenant authentication, birden fazla müşteri veya organizasyona hizmet veren uygulamalar için yaygın bir gereksinimdir. Bu, her tenant için ayrı authentication ve authorization mekanizmaları sağlamayı içerir ve bunlar kullanıcılarını, rollerini ve izinlerini bağımsız bir şekilde yönetmelerine olanak tanır.

ASP.NET Core, multi-tenant authentication için yerleşik bir destek sunmamaktadır, ancak bu işlevselliği uygulamanıza yardımcı olabilecek birkaç yaklaşım ve çerçeve bulunmaktadır.

Bir yaklaşım, Orchard Core veya ABP Framework gibi modüler bir uygulama çerçevesi kullanmaktır, bu çerçeveler multi-tenancy özelliklerini kutudan çıkar çıkmaz sunar. Bu çerçeveler, her tenant için ayrı authentication şemaları ve kullanıcı mağazaları oluşturmanıza izin verir, bu da kullanıcı verilerinin izole edilmesini ve tenant’a özgü yetkilendirme kurallarının uygulanmasını sağlar.

Başka bir yaklaşım ise, tenant çözümlemesi sağlayan ve tenant’a özgü authentication ayarlarını yapılandırmanıza olanak tanıyan Finbuckle.MultiTenant gibi bir kütüphane kullanmaktır. Finbuckle.MultiTenant ile, her tenant için farklı authentication şemaları, seçenekler ve kullanıcı mağazaları tanımlayabilir, böylece authentication ve authorization’ın bağımsız olarak yönetilmesini sağlayabilirsiniz.

Multi-tenant authentication uygularken, birden fazla tenant arasında authentication mekanizmalarının paylaşılmasının güvenlik ve gizlilik etkilerini dikkate almak önemlidir. Tenant verilerinin uygun şekilde izole edildiğinden, kullanıcı rolleri ve izinlerinin doğru bir şekilde uygulandığından ve hassas bilgilerin korunduğundan emin olun.

7. Razor Pages’de Authentication ve Authorization Entegrasyonu

Razor Pages, ASP.NET Core’da web uygulamalarının geliştirilmesini basitleştiren hafif bir web çerçevesidir. Razor Pages ile çalışırken, hassas sayfaları korumak ve yalnızca yetkili kullanıcıların erişimine izin vermek için authentication ve authorization’ı entegre etmek esastır.

Razor Page Handler’larına Authorization Uygulama

Varsayılan olarak, [Authorize] niteliği doğrudan Razor Page handler’larına, örneğin OnGet veya OnPost gibi, uygulanamaz. Ancak, bireysel sayfa handler’larına authorization uygulamak için alabileceğiniz birkaç yaklaşım vardır.

Bir yaklaşım, farklı authorization gereksinimlerine sahip handler’lar için ayrı sayfalar kullanmaktır. Bu, [Authorize] niteliğini sayfa seviyesinde uygulamanıza olanak tanır ve sayfa içindeki tüm handler’ların aynı authorization’ı gerektirmesini sağlar.

Başka bir yaklaşım ise, IAsyncPageFilter.OnPageHandlerSelectionAsync metodu kapsamında authorization gerçekleştiren özel bir authorization filtresi uygulamaktır. Bu, kullanıcının claim’lerini, rollerini veya diğer koşullarını kontrol etmenize ve handler’a erişim izni verip vermeyeceğinize karar vermenize olanak tanır.

Razor Pages İçin Özel Authorization Filtreleri

Özel authorization filtreleri, Razor Pages için özel authorization mantığını uygulamanın esnek bir yolunu sağlar. Özel bir authorization filtresi oluşturarak, ek authorization kontrolleri gerçekleştirebilir, authorization davranışını değiştirebilir veya çeşitli faktörlere dayalı karmaşık erişim kontrol kuralları uygulayabilirsiniz.

Razor Pages için özel bir authorization filtrosu uygulamak için, IAsyncPageFilter ve IOrderedFilter arabirimlerini uygulayan bir sınıf oluşturmanız gerekmektedir. IAsyncPageFilter arabirimi, authorization kontrolleri gerçekleştirmek için gerekli metotları sağlarken, IOrderedFilter arabirimi filtrelerin hangi sırada çalıştırılacağını belirtmenize olanak tanır.

Özel authorization filtresinizde, seçilen handler, kullanıcının claim’leri veya rolleri ve diğer ilgili veriler hakkında bilgi almak için mevcut PageHandlerSelectedContext’e erişebilirsiniz. Bu bilgilere dayanarak, authorization kararları verebilir ve buna göre PageHandlerSelectedContext.Result özelliğini ayarlayabilirsiniz.

Razor Pages’de Authentication Durumunu Yönetme

Razor Pages’de kimlik doğrulanmış kullanıcılarla çalışırken, authentication durumunu yönetmek ve sorunsuz bir kullanıcı deneyimi sağlamak önemlidir. Bu, kullanıcının authentication durumunu ele almayı, kişiselleştirilmiş içerik göstermeyi ve kimlik doğrulanmamış kullanıcıları giriş sayfasına yönlendirmeyi içerir.

ASP.NET Core, Razor Pages içinde geçerli kullanıcının kimliğine ve claim’lerine erişmek için HttpContext.User özelliğini sağlar. Kullanıcının authentication durumunu ve rollerini kontrol ederek, içeriği koşullu olarak render edebilir, kişiselleştirilmiş mesajlar gösterebilir veya authorization kurallarını uygulayabilirsiniz.

Kimlik doğrulanmamış kullanıcıları giriş sayfasına yönlendirmek için, sayfa seviyesinde [Authorize] niteliğini kullanabilirsiniz. Bu nitelik, kimlik doğrulanmamış kullanıcıları authentication seçeneklerinde belirtilen giriş sayfasına otomatik olarak yönlendirir.

Ayrıca, kullanıcının authentication durumuna veya rollerine göre koşullu olarak içerik render etmek için AuthorizeView etiket yardımcısını kullanabilirsiniz. Bu, kimlik doğrulanmış ve doğrulanmamış kullanıcılara farklı içerik göstermenize veya belirli rollerdeki kullanıcılara özgü içerik göstermenize olanak tanır.

Razor Pages için Authentication En İyi Uygulamaları

Razor Pages’te authentication ve authorization ile çalışırken, uygulamanızın güvenliği ve kullanılabilirliğini sağlamak için en iyi uygulamaları takip etmek önemlidir. Razor Pages authentication için bazı en iyi uygulamalar şunlardır:

  • [Authorize] Niteliğini Sayfa veya Handler Seviyesinde Uygulama: Yetkili kullanıcılara erişimi sınırlamak için sayfa veya handler seviyesinde [Authorize] niteliği uygulayın.
  • Handlerlar İçinde İnce Ayarlı Authorization Kararları İçin Claim’ler veya Rolleri Kullanma: Handlerlar içinde ince ayarlı authorization kararları almak için claim’ler veya roller kullanın.
  • Kullanıcının Authentication Durumuna veya Rollere Göre Kişiselleştirilmiş İçerik Gösterimi: Kullanıcının authentication durumuna veya rollerine göre kişiselleştirilmiş içerik gösterimi için AuthorizeView etiket yardımcısını kullanın.
  • Kimlik Doğrulanmamış Kullanıcıları Giriş Sayfasına Yönlendirme: Kimlik doğrulanmamış kullanıcıları giriş sayfasına yönlendirmek için [Authorize] niteliğini veya özel authorization filtrelerini kullanın.
  • Özel Claim’ler veya Gereksinimler İçin Ek Authorization Kontrolleri ile Hassas Sayfaları veya Eylemleri Koruma: Hassas sayfaları veya eylemleri, belirli claim’ler için kontrol yapma veya özel gereksinimler gibi ek authorization kontrolleri ile koruyun.
  • Authentication ve Authorization Hatalarını Zarif Bir Şekilde Ele Almak ve Kullanıcılara Anlamlı Hata Mesajları Sağlamak: Authentication ve authorization hatalarını zarif bir şekilde ele alın ve kullanıcılara anlamlı hata mesajları sağlayın.
  • Oturumla İlgili Güvenlik Açıklarına Karşı Koruma Sağlayacak Şekilde Güvenli Oturum Yönetimi Teknikleri Uygulama: Oturum sürelerini ve güvenli çerez özelliklerini içeren güvenli oturum yönetimi teknikleri uygulayarak oturumla ilgili güvenlik açıklarına karşı koruma sağlayın.

Bu en iyi uygulamaları takip ederek, Razor Pages uygulamanızın güvenli olmasını, sorunsuz bir kullanıcı deneyimi sağlamasını ve uygun erişim kontrolünü uygulamasını sağlayabilirsiniz.

8. API’leri Authentication ve Authorization ile Güvenli Hale Getirme

API’leri güvenli hale getirmek, hassas verileri korumak ve yalnızca yetkili istemcilerin maruz kalan kaynaklara erişimini sağlamak için hayati önem taşır. ASP.NET Core, API’leri güvenli hale getirmek için authentication ve authorization kullanarak yerleşik destek sunar, bu sayede erişim kontrolünü zorlayabilir, token’ları doğrulayabilir ve yaygın güvenlik tehditlerine karşı koruma sağlayabilirsiniz.

API’ler için Token Tabanlı Authentication Uygulama

Token tabanlı authentication, API’leri güvenli hale getirmek için popüler bir yaklaşımdır, çünkü istemcilere her istekle kimlik bilgileri göndermek yerine bir token kullanarak kimlik doğrulama yapma imkanı tanır. ASP.NET Core’da, token tabanlı authentication, JWT (JSON Web Tokens) ve JWT bearer authentication yöntemi kullanılarak uygulanabilir.

API’niz için JWT bearer authentication’ı etkinleştirmek için, gerekli token doğrulama parametreleri ve imzalayıcı anahtar ile authentication yöntemini yapılandırmanız gerekir. Bu, ValidateIssuer, ValidateAudience, ValidateIssuerSigningKey, ValidIssuer, ValidAudience ve IssuerSigningKey gibi seçenekleri belirtmeyi içerir.

Yapılandırıldıktan sonra, JWT bearer authentication ara yazılımı gelen JWT’leri doğrular, bütünlüklerini sağlar ve kullanıcının claim’lerini çıkarır. Doğrulanmış claim’ler daha sonra HttpContext.User özelliğinde kullanılabilir hale gelir, bu da onları API kontrolleriniz veya aksiyonlarınız içinde authorization kontrolleri için kullanmanıza olanak tanır.

Belirli API uç noktalarını korumak için, kontrolör veya aksiyon seviyesinde [Authorize] niteliğini uygulayabilirsiniz. Bu, yalnızca geçerli JWT’lere sahip kimlik doğrulanmış isteklerin korunan kaynaklara erişimine izin verilmesini sağlar.

API Uç Endpointlerini Authorization ile Koruma

Authentication’a ek olarak, authorization, API’leri güvenli hale getirmede kritik bir rol oynar. API uç noktalarınıza authorization kontrolleri uygulayarak, yalnızca gerekli izinlere veya rollere sahip kullanıcıların belirli eylemleri gerçekleştirmesine veya hassas kaynaklara erişmesine izin verebilirsiniz.

ASP.NET Core’da, authorization, [Authorize] niteliği, özel authorization filtreleri veya authorization politikaları kullanılarak uygulanabilir. Bu mekanizmalar, claim’ler, roller veya özel gereksinimlere dayalı ince ayarlı erişim kontrol kurallarını zorlamanıza olanak tanır.

API uç noktalarına authorization uygulamak için, kontrolör veya aksiyon seviyesinde [Authorize] niteliğini kullanabilirsiniz. Bu nitelik, authorization sürecini tetikler, bu süreç kimlik doğrulanmış kullanıcının korunan kaynağa erişim için gerekli izinlere veya rollere sahip olup olmadığını doğrular.

Alternatif olarak, ek authorization kontrolleri gerçekleştirmek veya karmaşık erişim kontrol mantığını uygulamak için özel authorization filtreleri uygulayabilirsiniz. Özel authorization filtreleri, çeşitli faktörlere dayalı uygulama özgü authorization kurallarını zorlamak için esnek bir yol sunar.

API Güvenliği İçin En İyi Uygulamalar

API’leri güvenli hale getirmek, yaygın güvenlik açıkları ve saldırılara karşı korumak için en iyi uygulamaları takip etmeyi ve uygun güvenlik önlemlerini uygulamayı gerektirir. Bu en iyi uygulamaları API geliştirme sürecinize dahil ederek, API kaynaklarınızın bütünlüğünü, gizliliğini ve erişilebilirliğini sağlayabilirsiniz.

API güvenliği için bazı en iyi uygulamalar şunları içerir:

  • Güçlü Authentication ve Authorization Mekanizmaları Uygulama: Örneğin, token tabanlı authentication veya OAuth 2.0 gibi.
  • Verileri Aktarım Sırasında Koruyacak Güvenli İletişim Protokolleri Kullanma: Örneğin, HTTPS.
  • Brute-force Saldırılarına veya Denial-of-Service (DoS) Saldırılarına Karşı Korumak İçin Hız Sınırlama ve Throttling Uygulama.
  • SQL Enjeksiyonu veya Cross-Site Scripting (XSS) Gibi Yaygın Güvenlik Açıklarını Önlemek İçin Kullanıcı Girişlerini Doğrulama ve Temizleme.
  • Güvenlik Olaylarını Tespit Etmek ve Yanıt Vermek İçin Uygun Hata Yönetimi ve Kayıt Uygulama.
  • Güvenlik Açıklarını Gidermek İçin API Bağımlılıklarınızı ve Çerçevelerinizi Düzenli Olarak Güncelleme ve Yama Uygulama.
  • Potansiyel Güvenlik Kusurlarını Tanımlamak ve Gidermek İçin Güvenlik Testleri Yapma: Örneğin, penetrasyon testleri veya kod incelemeleri.
  • Şüpheli Davranışları veya Yetkisiz Erişim Girişimlerini Tespit Etmek İçin API Etkinliklerini İzleme ve Kayıt.
  • Geliştiricileri ve Kullanıcıları API Güvenliği En İyi Uygulamaları ve Potansiyel Riskler Konusunda Eğitme.

Bu en iyi uygulamaları takip ederek, hassas verileri koruyan, yetkisiz erişimi önleyen ve kullanıcılarınızın güvenini sürdüren güvenli ve güvenilir API’ler oluşturabilirsiniz.

9. Gerçek Dünya Örnekleri ve Kullanım Durumları

E-ticaret platformlarından finans sistemlerine ve mobil uygulamalara kadar çeşitli gerçek dünya uygulamalarında authentication ve authorization kritik bileşenlerdir. Bu bölümde, authentication ve authorization’ın önemli rol oynadığı bazı gerçek dünya örnekleri ve kullanım durumlarına göz atacağız.

E-Ticaret Uygulamalarında Authentication ve Authorization Uygulamak

E-ticaret uygulamalarında, müşteri verilerini korumak, ödeme işlemlerini güvenli hale getirmek ve yönetimsel işlevler için erişim kontrolünü sağlamak için authentication ve authorization esastır. Güçlü bir authentication ve authorization sistemi uygulayarak, e-ticaret platformları yalnızca yetkili kullanıcıların sipariş bilgilerine erişmesini, ürün kataloglarını güncellemesini veya müşteri hesaplarını yönetmesini sağlayabilir.

Kullanıcı adı/şifre authentication’ı veya sosyal medya ile giriş yapma gibi authentication mekanizmaları, müşterilere hesap oluşturma, giriş yapma ve sipariş geçmişi veya kaydedilmiş adresler gibi kişiselleştirilmiş özelliklere erişim imkanı tanır. Rol tabanlı authorization, müşterilerin kendi verilerine erişimini sağlarken yönetimsel işlevlere veya hassas müşteri bilgilerine erişimi sınırlar.

İki faktörlü authentication veya dolandırıcılık kontrolü gibi ek güvenlik önlemleri, yetkisiz erişimi veya dolandırıcılık faaliyetlerini önlemek için uygulanabilir. En iyi uygulamalara ve endüstri standartlarına bağlı kalarak, e-ticaret uygulamaları müşterileri ile güven inşa edebilir ve güvenli bir alışveriş deneyimi sunabilir.

ASP.NET Core ile Finans Uygulamalarını Güvenli Hale Getirmek

Bankacılık sistemleri veya yatırım platformları gibi finans uygulamaları, son derece hassas verilerle çalışır ve yetkisiz erişimi veya dolandırıcılık faaliyetlerini önlemek için güçlü güvenlik önlemleri gerektirir. Authentication ve authorization, finansal verilerin bütünlüğünü ve gizliliğini sağlamada kritik rol oynar.

Finans uygulamaları genellikle, geleneksel kullanıcı adı/şifre authentication’ının ötesinde ek bir güvenlik katmanı sağlamak için çok faktörlü authentication (MFA) kullanır. MFA, SMS doğrulama kodları, parmak izi veya yüz tanıma veya kullanıcının kimliğini doğrulamak ve hesap ele geçirme saldırılarına karşı korumak için donanım token’ları gibi faktörleri içerebilir.

Finans uygulamalarında authorization, genellikle kullanıcı rolleri ve izinlerine dayanır. Müşteriler, çalışanlar veya yöneticiler gibi farklı roller, finansal verilere ve işlevlere erişim düzeylerine sahiptir. Rol tabanlı authorization, kullanıcıların yalnızca rol ve yetki düzeylerine uygun eylemleri gerçekleştirmesini veya kaynaklara erişmesini sağlar.

Güvenliği daha da artırmak için, finans uygulamaları işlem izleme, dolandırıcılık tespit algoritmaları veya güvenli denetim kaydı gibi ek güvenlik önlemleri uygulayabilir. Bu önlemler, dolandırıcılık faaliyetlerini tespit etmeye ve önlemeye, müşteri varlıklarını korumaya ve düzenleyici gereksinimlere uyum sağlamaya yardımcı olur.

Mobil Uygulamalar için Güvenli API’ler Oluşturmak

Mobil uygulamalar sık sık veri almak, işlem yapmak veya arka sistemlerle etkileşimde bulunmak için API’lere bağımlıdır. Bu API’leri güvenli hale getirmek, kullanıcı verilerini korumak, yetkisiz erişimi önlemek ve mobil uygulama kullanıcılarının güvenini sürdürmek için kritik öneme sahiptir.

JWT gibi token tabanlı authentication uygulamak, mobil uygulamaların kullanıcıları güvenli bir şekilde doğrulamasını ve mobil uygulama ile sunucu arasında iletilen verilerin korunmasını sağlar. Bu yöntem, doğrulanmış kullanıcılara token’lar sağlar, daha sonra bu token’lar korunan API uç noktalarına erişim için kullanılır.