Article

Pazartesi, 23 Eyl 2024 - 21:09

.NET 8 ile Gelişmiş Kimlik Doğrulama ve Yetkilendirme Yapısı

Owner: Barış Gelebek

".NET 8, kimlik doğrulama ve yetkilendirme süreçlerinde sunduğu yeniliklerle bu yapıların daha basit, anlaşılır ve kullanıcı dostu hale gelmesini sağlıyor. "



Bu yazıda, .NET 8’in kimlik yönetimi özelliklerini nasıl etkili bir şekilde kullanabileceğinizi adım adım inceleyeceğiz.


1. Yeni Yaklaşım

Geleneksel uygulama geliştirme süreçlerinde, kullanıcıların kimlik doğrulama ve yetkilendirme işlemleri genellikle karmaşık bir yapı gerektiriyordu. Giriş (Login), token oluşturma (CreateToken) ve yenileme (RefreshToken) gibi endpoint'ler oluşturmak gerekiyordu. Ancak .NET 8 ile birlikte, bu süreçler daha sade ve anlaşılır bir hale geldi.


2. Uygulama Aşamaları


Adım 1: Yeni Bir API Projesi Oluşturma

Yeni bir API projesi oluşturun. Bunun için terminal veya komut istemcisine şu komutu girin:

dotnet new webapi -n MyAuthApi
cd MyAuthApi

Projeyi oluşturduktan sonra, hedef çerçeve olarak .NET 8’i seçtiğinizden emin olun. Projenizin .csproj dosyası aşağıdaki gibi görünmelidir:

<TargetFramework>net8.0</TargetFramework>


Adım 2: Kullanıcı Modeli Oluşturma

Uygulamanızda kullanıcıların bilgilerini tutmak için bir kullanıcı modeli oluşturmalısınız. Aşağıda basit bir User modeli örneği verilmiştir:

public class User
{ public int Id { get; set; } public string UserName { get; set; } public string PasswordHash { get; set; } public string Email { get; set; } }


Adım 3: Kimlik Doğrulama Ayarları

Program.cs dosyanızı açın ve aşağıdaki kodları ekleyerek JWT tabanlı kimlik doğrulama şemasını oluşturun:

using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.IdentityModel.Tokens; var builder = WebApplication.CreateBuilder(args); // JWT ayarlarını yapılandırma builder.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 = builder.Configuration["Jwt:Issuer"], ValidAudience = builder.Configuration["Jwt:Audience"], IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(builder.Configuration["Jwt:Key"])) }; });

Bu kod, JWT doğrulaması için gerekli ayarları sağlar. appsettings.json dosyanıza da aşağıdaki gibi JWT ayarlarını eklemeyi unutmayın:

"Jwt": {
"Key": "YourSecretKeyHere", "Issuer": "YourIssuer", "Audience": "YourAudience" }


Adım 4: Veritabanı Bağlantısı

Veritabanı bağlantısını ayarlamak için Entity Framework Core kullanabilirsiniz. Projenize gerekli NuGet paketlerini ekleyin:

dotnet add package Microsoft.EntityFrameworkCore
dotnet add package Microsoft.EntityFrameworkCore.SqlServer dotnet add package Microsoft.EntityFrameworkCore.Tools

Sonrasında bir DbContext sınıfı oluşturun:

public class MyDbContext : DbContext
{ public MyDbContext(DbContextOptions<MyDbContext> options) : base(options) { } public DbSet<User> Users { get; set; } }

Program.cs dosyasında veritabanı bağlantısını yapılandırın:

builder.Services.AddDbContext<MyDbContext>(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")));


Adım 5: Endpoint Tanımlamaları

Kullanıcı işlemlerini gerçekleştirecek endpoint'leri eklemek için MapIdentityApi metodunu kullanabilirsiniz. Aşağıda, kullanıcı kaydı ve giriş işlemlerini gerçekleştiren örnek endpoint'ler bulunmaktadır:

var app = builder.Build();
app.UseAuthentication(); app.UseAuthorization(); app.MapPost("/register", async (User user, MyDbContext db) => { user.PasswordHash = BCrypt.Net.BCrypt.HashPassword(user.PasswordHash); db.Users.Add(user); await db.SaveChangesAsync(); return Results.Created($"/users/{user.Id}", user); }); app.MapPost("/login", async (User loginUser, MyDbContext db) => { var user = await db.Users.SingleOrDefaultAsync(u => u.UserName == loginUser.UserName); if (user == null || !BCrypt.Net.BCrypt.Verify(loginUser.PasswordHash, user.PasswordHash)) { return Results.Unauthorized(); } // Token oluşturma işlemi burada yapılacak return Results.Ok(); // Token ile birlikte döneceksiniz });


3. Veritabanı Güncellemeleri

Veritabanında gerekli tabloları oluşturmak için aşağıdaki komutları kullanın:

dotnet ef migrations add UserIdentity
dotnet ef database update

Bu komutlarla kullanıcı tablolarının migration dosyasını hazırlayıp veritabanını güncelleyin.


4. Test Süreci

Yapıyı test etmek için Postman veya benzeri bir araç kullanabilirsiniz. /register ve /login endpoint'lerini test ederek kullanıcı kayıt ve giriş işlemlerinin doğru çalışıp çalışmadığını kontrol edin.

  • Kayıt İşlemi: /register endpoint'ine kullanıcı bilgilerini göndererek yeni bir kullanıcı oluşturabilirsiniz.
  • Giriş İşlemi: /login endpoint'ine doğru kullanıcı bilgileri ile giriş yapmayı deneyin.


5. Sonuç

Güvenlik ve kimlik yönetimi, modern yazılım uygulamaları için kritik bir rol oynamaktadır. Bu makalede, .NET 8 ile gelen kimlik ve yetkilendirme yönetiminin nasıl etkili bir şekilde uygulanabileceğini öğrendiniz. Yeni özellikler, uygulamanızın güvenliğini artırmanıza, kullanıcı kimlik doğrulama süreçlerini kolaylaştırmanıza ve yetkilendirme kurallarını özelleştirmenize yardımcı olacaktır.


6. Güvenlik Sürekliliği

Unutmayın ki güvenlik, bir projeye başlarken biten bir süreç değildir; sürekli bir gelişim gerektirir. Kimlik doğrulama ve yetkilendirme gereksinimleri zaman içinde değişebilir, bu yüzden uygulamanızın güvenliğini düzenli olarak gözden geçirip güncellemek önemlidir.

Bu makale, kimlik ve yetkilendirme yönetimi konusunda size bir başlangıç noktası sağlamayı amaçlıyor. Umarım, uygulamanızın güvenliğini artırmanıza ve etkili bir kimlik yönetimi gerçekleştirmenize yardımcı olur. 

Bir sonraki yazıda görüşmek üzere


Stats:
0 comments
14 views
0 likes

Comments: