ASPNET Core'da Authentication ve Authorization, kullanıcıların uygulamalara güvenli bir şekilde erişimini yönetmek için önemlidir Authentication, kullanıcının kimlik doğrulaması işlemidir ve JWT standardıyla gerçekleştirilir JWT, kullanıcının doğru kimlik bilgileri girip girmediği kontrol edilerek authentication işlemini gerçekleştirir Authorization ise kullanıcının belirli kaynaklara erişim yetkisine sahip olup olmadığını kontrol eder ASPNET Core'da bunun için bireysel kullanıcı, grup ve rol tabanlı yetkilendirme gibi farklı yöntemler mevcuttur JWT kullanımı da Authorization ve Authentication işlemleri sırasında kullanılabilecek güvenli bir yöntemdir ASPNET Core Middleware ile birleştirildiğinde bu işlemler daha etkili bir şekilde gerçekleştirilebilir

ASP.NET Core'da Authorization ve Authentication, kullanıcıların güvenli bir şekilde uygulamalara erişimini yönetmek için önemlidir. Bu makalede, kullanıcıların kimlik doğrulamasını gerçekleştirmenin ve yetkilendirmenin nasıl yapılabileceği ele alınacaktır. ASP.NET Core Middleware'in nasıl kullanılabileceği de incelenecektir. Bu sayede, kullanıcıların doğru haklara erişimini sağlamak ve uygulamanın güvenliği sağlamak için gereken işlemlerin nasıl yapılabileceği öğrenilecektir.
Authorization Nedir?
Authorization, kullanıcının belirli bir kaynağa erişim yetkisine sahip olup olmadığını kontrol eden bir süreçtir. Bir web sitesinde, kullanıcının yalnızca kaynağa erişimi olmayan kısımlara erişmesi gerektiğinde, Authorization gereklidir.
Bu süreç, güvenliği artırır ve sadece yetkili kullanıcıların belirli kaynaklara erişmelerini sağlar. Örneğin, bir banka web sitesinde, müşterilerin hesap bilgilerine erişmek için müşteri numarası ve şifre girmesi gerektiğinde Authorization kullanılır. Bu sayede, müşteri bilgileri yalnızca yetkili kullanıcılar tarafından görüntülenebilir.
Authorization, aynı zamanda bir web sitesindeki önemli bilgilere erişim kontrolünü sağlar. Yetkili kullanıcılar, yalnızca belirli kaynaklara erişebilir ve bu sayede gizli bilgilerin korunması sağlanmış olur.
ASP.NET Core için, Authorization, birçok farklı yöntemle uygulanabilir. Bireysel kullanıcıların veya grupların yetkilendirilmesi, rol tabanlı yetkilendirme ve yetkilendirme politikaları gibi yöntemler, Authorization özelleştirmesi sağlar. Bu sayede, işletmeler kendi ihtiyaçlarına göre düzenlenmiş bir Authorization yapılandırabilirler.
Authentication Nedir?
Authentication kullanıcının kimliğini doğrulama işlemidir. Bu işlem kullanıcının yetkilerinin belirlenmesinde önemli bir rol oynar. Örneğin bir banka uygulamasında müşteri girişi yapmak istendiğinde kullanıcının kimliğini doğrulamak için authentication kullanılır.
Authentication, kullanıcı adı ve şifre gibi bilgilerin doğrulanarak kullanıcının kimliğinin belirlenmesini sağlar. Böylece yanıltıcı kullanıcıların önlenmesine yardımcı olur. ASP.NET Core'da ise authentication işlemi JWT (JSON Web Token) standardı kullanılarak gerçekleştirilebilir. Bu sayede kullanıcının kimliğinin doğrulanması kolay ve güvenli bir şekilde yapılabilir.
JWT, kullanıcının authentication işleminde kullanabileceği bir standarttır. Bu standardın kullanılması sayesinde kullanıcının doğru kimlik bilgileri girip girmediği kontrol edilebilir. JWT, kullanıcının doğrulanmış kimliğine ait bilgileri depolayarak authentication işlemini gerçekleştirir. Bu bilgiler sonradan Authorization işleminde kullanılacak yetkileri belirlemede kullanılabilir.
- JWT, kullanıcının kimliği ve role gibi bilgileri JSON formatında bir web token içerisinde taşır.
- Token'in içerisinde kimlik bilgilerinin doğruluğunu kontrol eden bir imza bulunur ve bu sayede token'in sahte olup olmadığı kontrol edilebilir.
- Token, kullanıcı tarafından client üzerinden sunucuya gönderilir.
ASP.NET Core'da, JWT oluşturma ve kontrol işlemleri için kullanılan kütüphaneler mevcuttur. Bu kütüphaneler sayesinde authentication işlemi güvenli bir şekilde gerçekleştirilebilir.
JWT (JSON Web Token)
JWT, Authentication işleminde kullanılan yaygın bir standarttır. JSON Web Token (JWT), bir web uygulaması için kullanıcı kimliğini doğrulama standartlarından biridir. JWT, bir kullanıcının kimliği veya taşıdığı bilgileri saklamak için kullanılır ve genellikle tek yönlü şifreleme yöntemini kullanır. Bu nedenle, JWT, web uygulaması geliştiricileri tarafından güvenli bir kimlik doğrulama standartı olarak benimsenir.
JWT'nin yapısı, kullanımı ve neden yaygın olarak tercih edildiği hakkında daha fazla bilgi edinmek isteyenler için burada açıklamalar yer alıyor. Bir JWT, üç bölüm içerir:
- Başlık (Header): JWT'nin hangi algoritma ile şifrelendiğini, ne tür bir işleme tabi tutulduğunu gösteren bir JSON nesnesidir.
- Payload: JWT'nin taşıdığı veriler burada bulunur. JSON nesnesi şeklinde olabilir ve taşınan verilere göre çeşitli alanlar içerebilir.
- İmza (Signature): JWT'nin doğruluğunu sağlamak için kullanılır. JWT'nin gizli bir şekilde saklanan bir anahtarı vardır ve bu anahtar kullanılarak JWT imzalanır. Doğrulama sırasında, JWT'nin imzası doğrulanarak, JWT'nin orijinal ve güvenli bir şekilde gönderildiği kontrol edilir.
ASP.NET Core'da, JWT'nin kullanımı oldukça basittir. JWT, Microsoft.IdentityModel.Tokens paketi ile kullanılabilir. İlgili paket önceden yüklenerek, kod içerisinde gerekli işlemler yazılır ve sonrasında JWT kullanılabilir hale gelir. JWT'nin kullanımı, .NET Core Middleware ile birleştirildiğinde daha da etkili bir hale getirilebilir. Bu sayede, Authentication ve Authorization işlemlerinde JWT kullanarak daha net ve güvenli bir yöntem elde edilir.
JWT Mimarisi
JSON Web Token (JWT), bir Authorization işlemi sırasında kullanılan standart bir yöntemdir. JWT, bir header (başlık), payload (içerik) ve signature (imza) olmak üzere üç parçadan oluşur.
Header | Payload | Signature |
---|---|---|
Birçok bilgi içerebilir, örneğin algoritma bilgisi | Kullanıcı hakkında bilgi içerebilir, örneğin rol | Token'ın doğruluğunu doğrulamak için kullanılır |
Header ve Payload farklı veriler içerebilir, fakat ikisi de Base64 encoded olur. Signature ise, header ve payload'ın birleştirilip belirli bir algoritma ile imzalanması sonucu oluşur.
JWT, bir client tarafından bir sunucuya gönderilir ve sunucu tarafından kullanıcının kimliğinin doğrulanması ve kullanıcının yetkilerinin sorgulanması için kullanılır.
JWT Nasıl Oluşturulur?
ASP.NET Core'da JWT oluşturmak oldukça basittir. İlk olarak, kullanıcıya ait verilerin Claims tipinde bir liste halinde toplanması gerekir. Bu liste, daha sonra JWT oluşturma sırasında kullanılacaktır.
Öncelikle, Claims listesi için bir class oluşturulur. Daha sonra, ilgili kullanıcı bilgileri bu class'ın özellikleriyle eşleştirilir. Örnek olarak, kullanıcının ismi ve rolü bir Claims listesi içerisinde tutulabilir.
```c#public class CustomClaims{ public string UserName { get; set; } public string Role { get; set; }}```
JWT oluşturma işlemi ise, yine bir Options nesnesi üzerinden gerçekleştirilir. Bu nesne, JWT'nin hangi parametrelerle oluşturulacağını belirler.
```c#var tokenHandler = new JwtSecurityTokenHandler();var key = Encoding.UTF8.GetBytes("Your Secret Key");
var tokenDescriptor = new SecurityTokenDescriptor{ Subject = new ClaimsIdentity(new[] { new Claim(ClaimTypes.Name, customClaim.UserName), new Claim(ClaimTypes.Role, customClaim.Role), }), Expires = DateTime.UtcNow.AddHours(1), SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature)};
var token = tokenHandler.CreateToken(tokenDescriptor);var jwt = tokenHandler.WriteToken(token);```
Yukarıdaki kod bloğunda, öncelikle JwtSecurityTokenHandler sınıfından bir tokenHandler nesnesi oluşturulur ve Secret Key belirtilir. Daha sonra, tokenDescriptor nesnesi üzerinde ClaimsIdentity oluşturulur ve JWT'nin geçerlilik süresi belirlenir. En son adımda ise, SigningCredentials sınıfı kullanılarak JWT imzalanır ve WriteToken() metoduyla string olarak çıktı alınır.
Bu şekilde, ASP.NET Core'da JwtSecurityTokenHandler sınıfının sağladığı kolaylıkla JWT oluşturulabilir. Bu JWT, Authentication sırasında kullanılacak ve yaygın olarak kullanılan bir standart olan JSON Web Token olarak isimlendirilir.
Claims-Based Authentication
Claims-Based Authentication, kullanıcının haklarını kontrol etmek için kullanılan bir yöntemdir. Bu yöntem, kullanıcılara ekstra bilgi sağlayarak Authorization işlemini yönetmesine olanak tanır. Bu bilgiler 'claim' olarak adlandırılır ve kullanıcının sahip olduğu roller, yetkiler vb. bilgileri içerebilir.
Bu yöntem, Authorization sürecini daha güvenli hale getirir. Örneğin, kullanıcının sadece belirli bir sayfaya erişmesine izin vermek yerine, sayfanın belirli bir bölümüne erişim sağlamasına izin verebilirsiniz. Bu yöntem sayesinde, kullanıcıların sadece ihtiyaçları olan kaynaklara erişim sağlaması mümkün hale gelir.
Claims Örnekleri | Açıklama |
---|---|
name | Kullanıcının adı |
email | Kullanıcının e-posta adresi |
role | Kullanıcının rolü (admin, kullanıcı vb.) |
Claims-Based Authentication süreci, kullanıcının bir istek gönderdiğinde gerçekleşir. Bu istek genellikle bir URL'ye yönlendirme veya bir kaynağa erişim isteği gibi bir işlemi içerir. İsteğin çalıştırılması sırasında, sisteme giriş yapan kullanıcının rolü kontrol edilir ve kaynaklara erişim izni verilip verilmeyeceği kararlaştırılır.
ASP.NET Core'da, Claims-Based Authentication, kullanıcıların statik rollerini yönetmek için kullanılan bir mekanizmadan farklı olarak, kullanıcının yetkilerini elde etmek için uygulanabilir. Bu nedenle, Authorization sürecinde bu yöntem kullanılarak, daha fazla esneklik ve kontrol sağlanabilir.
.NET Core Middleware
.NET Core Middleware, ASP.NET Core'un işlevselliğini genişletmek için kullanılan yazılım bileşenleridir. Middleware, istek ve yanıt işlemlerini yönetmek ve farklı HTTP ayarlarını uygulamak için kullanılır.
ASP.NET Core'da Middleware kullanarak Authorization ve Authentication süreçleri yönetilebilir. Örneğin, bir Authentication Middleware, gelen her isteği kontrol eder ve kullanıcının token'ına veya kimliğine göre erişim sağlar. Böylece, doğrulanmamış kullanıcılara erişim engellenir.
Aynı şekilde, Authorization Middleware, kullanıcının erişim seviyelerini yönetir ve belirli bir kaynağa erişip erişemeyeceğini kontrol eder. Bu nedenle, belli bir kullanıcının belirli bir veriye erişim hakkı yoksa, Middleware tarafından engellenir.
ASP.NET Core Middleware, Authorization ve Authentication süreçleri için birçok önceden programlanmış seçenek sağlar. Bu önceden programlanmış Middleware'lara ek olarak, geliştiriciler kendi özel Middleware'lerini oluşturarak süreçlerini daha da özelleştirebilirler.