ASP Genel VMware

ASP.NET Core ile JWT Kimlik Doğrulama Nasıl Yapılır

ASP.NET Core ile JWT Kimlik Doğrulama Nasıl Yapılır

ASP.NET Core ile JWT Kimlik Doğrulama Nasıl Yapılır

ASP.NET Core, modern web uygulamaları geliştirmek için popüler bir platformdur ve güvenlik, uygulama geliştirme sürecinde en önemli unsurlardan biridir. JSON Web Token (JWT), kullanıcı kimlik doğrulama ve yetkilendirme işlemlerini gerçekleştirmek için yaygın olarak kullanılan bir tekniktir. Bu makalede, ASP.NET Core ile JWT kimlik doğrulamanın nasıl yapılacağını detaylı bir şekilde ele alacağız.

JWT Nedir?

JWT (JSON Web Token), JSON formatında veri taşıyan ve genellikle kullanıcı kimlik doğrulama işlemlerinde kullanılan bir standarttır. JWT, üç parçadan oluşur: başlık (header), yük (payload) ve imza (signature). Başlık, kullanılan algoritmayı ve token türünü belirtir. Yük kısmı, kullanıcı bilgilerini ve diğer meta verileri içerir. İmza ise token’ın bütünlüğünü ve kaynağını doğrulamak için kullanılır.

ASP.NET Core Projesi Oluşturma

JWT kimlik doğrulama işlemlerine başlamadan önce, bir ASP.NET Core projesi oluşturmamız gerekiyor. Aşağıdaki adımlar, yeni bir ASP.NET Core Web API projesi oluşturmak için kullanılabilir:

1. Visual Studio veya .NET CLI Kullanarak Proje Oluşturma:
– Visual Studio’da yeni bir proje oluşturun ve “ASP.NET Core Web API” şablonunu seçin.
– .NET CLI kullanarak terminalde aşağıdaki komutu çalıştırarak proje oluşturabilirsiniz:

     dotnet new webapi -n JwtAuthDemo
     

Bu komut, “JwtAuthDemo” adında yeni bir ASP.NET Core Web API projesi oluşturur.

2. Gerekli Paketleri Yükleme:
JWT ile çalışmak için Microsoft.AspNetCore.Authentication.JwtBearer paketini yüklemeniz gerekmektedir. Aşağıdaki CLI komutunu kullanarak bu paketi yükleyebilirsiniz:

   dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer
   

Bu komut, projenize JWT Bearer Authentication desteği ekler.

JWT Yapılandırması

JWT kimlik doğrulama işlemi için uygulamanızda bazı yapılandırmalar yapmanız gerekmektedir. Bu yapılandırmalar, genellikle Startup.cs dosyasında gerçekleştirilir.

Startup.cs Dosyasının Yapılandırılması

Startup.cs dosyasında, JWT kimlik doğrulama hizmetini yapılandırmak için aşağıdaki adımları izleyin:

1. ConfigureServices Metodunda JWT Ayarlarını Yapılandırma:

Aşağıdaki kod, JWT kimlik doğrulama hizmetini ConfigureServices metoduna ekler:

   public void ConfigureServices(IServiceCollection services)
   {
       services.AddAuthentication(options =>
       {
           options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
           options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
       })
       .AddJwtBearer(options =>
       {
           options.TokenValidationParameters = new TokenValidationParameters
           {
               ValidateIssuer = true,
               ValidateAudience = true,
               ValidateLifetime = true,
               ValidateIssuerSigningKey = true,
               ValidIssuer = Configuration["Jwt:Issuer"],
               ValidAudience = Configuration["Jwt:Audience"],
               IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["Jwt:Key"]))
           };
       });

       services.AddControllers();
   }
   

Bu yapılandırma, JWT tokenlarının doğrulanması için gerekli ayarları tanımlar. Issuer, Audience ve Key gibi değerler appsettings.json dosyasında saklanmalıdır.

2. Configure Metodunda Kimlik Doğrulamayı Etkinleştirme:

Configure metodunda kimlik doğrulama ve yetkilendirme ara yazılımlarını ekleyin:

   public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
   {
       if (env.IsDevelopment())
       {
           app.UseDeveloperExceptionPage();
       }

       app.UseRouting();

       app.UseAuthentication();
       app.UseAuthorization();

       app.UseEndpoints(endpoints =>
       {
           endpoints.MapControllers();
       });
   }
   

UseAuthentication ve UseAuthorization çağrıları, kimlik doğrulama ve yetkilendirme mekanizmalarını etkinleştirir.

JWT Token Oluşturma

JWT kimlik doğrulama sürecinin bir parçası olarak, kullanıcı giriş yaptığında bir JWT token oluşturulması gerekir. Bu token, kullanıcıya kimlik doğrulama bilgilerini taşır.

Token Oluşturma Metodu

Aşağıda, bir kullanıcı için JWT token oluşturan bir örnek metot bulunmaktadır:

private string GenerateJwtToken(User user)
{
    var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["Jwt:Key"]));
    var credentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256);

    var claims = new[]
    {
        new Claim(JwtRegisteredClaimNames.Sub, user.Username),
        new Claim(JwtRegisteredClaimNames.Email, user.Email),
        new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString())
    };

    var token = new JwtSecurityToken(
        issuer: Configuration["Jwt:Issuer"],
        audience: Configuration["Jwt:Audience"],
        claims: claims,
        expires: DateTime.Now.AddMinutes(30),
        signingCredentials: credentials);

    return new JwtSecurityTokenHandler().WriteToken(token);
}

Bu metot, belirli bir kullanıcı için bir JWT token oluşturur. Token, kullanıcı adı, e-posta ve benzersiz bir kimlik içerir.

JWT Token Kullanarak Kimlik Doğrulama

Oluşturulan JWT token, istemciden gelen isteklerde kimlik doğrulama için kullanılır. Bu token, genellikle HTTP istek başlıklarında taşınır.

Yetkilendirilmiş Bir Endpoint Oluşturma

JWT kimlik doğrulama kullanarak korunan bir endpoint oluşturmak için, ilgili kontrolör veya aksiyon metoduna [Authorize] özniteliğini ekleyebilirsiniz:

[Authorize]
[ApiController]
[Route("[controller]")]
public class SecureController : ControllerBase
{
    [HttpGet]
    public IActionResult GetSecureData()
    {
        return Ok(new { message = "Bu, yetkilendirilmiş bir endpoint'tir." });
    }
}

Bu örnekte, SecureController sınıfı yalnızca yetkilendirilmiş kullanıcılar tarafından erişilebilir.

JWT ve Performans

JWT tokenlarının boyutu, uygulamanızın performansını etkileyebilir. Tokenlar çok büyük olduğunda, istemci ve sunucu arasındaki veri aktarımı yavaşlayabilir. Bu nedenle, JWT tokenlarını mümkün olduğunca küçük tutmak önemlidir. Gereksiz bilgileri yük kısmına eklemekten kaçının ve token süresini gereksiz yere uzun tutmayın.

Ayrıca, JWT kimlik doğrulama işlemlerinin hızlı ve güvenilir bir şekilde çalışabilmesi için güçlü bir sunucu altyapısına ihtiyaç duyulabilir. VDS Sunucular veya Cloud Sunucular gibi seçenekler, uygulamanızın performansını artırmak için ideal çözümler sunabilir.

Güvenlik Önlemleri

JWT kullanırken dikkat edilmesi gereken bazı güvenlik önlemleri bulunmaktadır:

1. Gizli Anahtarın Güvenliği:
Gizli anahtar (IssuerSigningKey) çok iyi korunmalıdır. Bu anahtarın ele geçirilmesi, tokenların kolayca sahte olarak üretilmesine olanak tanır.

2. Token Süresi:
Token süresi, mümkün olduğunca kısa tutulmalıdır. Bu, tokenların çalınması durumunda riskleri azaltır.

3. HTTPS Kullanımı:
JWT tokenları, HTTPS üzerinden iletilmelidir. Bu, tokenların ağ üzerinde dinlenmesini engeller.

4. Token İptali:
Gerektiğinde tokenları iptal edebilmek için bir mekanizma geliştirin. Örneğin, kullanıcı şifresini değiştirdiğinde veya oturumu kapattığında mevcut tokenların geçersiz kılınması gerekebilir.

Sonuç

ASP.NET Core ile JWT kimlik doğrulama, modern web uygulamalarında kullanıcı kimlik doğrulama ve yetkilendirme işlemlerini güvenli ve etkili bir şekilde yönetmek için güçlü bir yöntem sunar. Bu makalede, JWT kimlik doğrulamanın nasıl yapılandırılacağı, token oluşturma süreci ve güvenlik önlemleri gibi konulara değindik. Uygulamanızın performansını ve güvenliğini artırmak için Sanal Sunucular gibi altyapı çözümlerini değerlendirebilirsiniz.