".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.
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.
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>
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; }
}
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"
}
Veritabanı bağlantısını ayarlamak için Entity Framework Core kullanabilirsiniz. Projenize gerekli NuGet paketlerini ekleyin:
dotnet add package Microsoft.EntityFrameworkCoredotnet 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")));
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
});
Veritabanında gerekli tabloları oluşturmak için aşağıdaki komutları kullanın:
dotnet ef migrations add UserIdentitydotnet ef database update
Bu komutlarla kullanıcı tablolarının migration dosyasını hazırlayıp veritabanını güncelleyin.
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.
/register
endpoint'ine kullanıcı bilgilerini göndererek yeni bir kullanıcı oluşturabilirsiniz./login
endpoint'ine doğru kullanıcı bilgileri ile giriş yapmayı deneyin.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.
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