.NET Core Identity Nedir?

Fatih MUTLU
Dec 26, 2024

NOT : Bu yazıyı chatgpt yazmıştır! .NET Core Identity, kullanıcı kimlik doğrulama, yetkilendirme ve kullanıcı yönetimi gibi işlemleri kolaylaştıran bir kütüphanedir. .NET Core uygulamalarında güvenli kullanıcı yönetimi sağlamak için kullanılır ve genellikle kullanıcıların kaydedilmesi, oturum açılması, parola sıfırlama, kullanıcı rolleri, izinler ve daha fazlası gibi işlemleri içerir.

.NET Core Identity, temel güvenlik özellikleri ile birlikte gelir ve kullanıcıların kimliklerini doğrulamak için gereken tüm altyapıyı sağlar. Bu sayede uygulamanızda kullanıcı yönetimi için sıfırdan bir sistem oluşturmanıza gerek kalmaz. Identity, ASP.NET Core ile entegre bir şekilde çalışır ve özellikle web uygulamalarında yaygın olarak kullanılır.

.NET Core Identity Özellikleri Kullanıcı Kimlik Doğrulama: Kullanıcı adı, e-posta, parolalar, Google veya Facebook gibi dış sağlayıcılarla kimlik doğrulaması. Kullanıcı Rolleri ve İzinler: Kullanıcılar için farklı roller oluşturabilir ve bu rollere dayalı olarak farklı izinler atayabilirsiniz. Parola Politikaları: Şifre uzunluğu, karmaşıklığı gibi kurallar ile güvenli parola yönetimi sağlar. Çok Faktörlü Kimlik Doğrulama (MFA): Kullanıcıların daha güvenli bir şekilde kimlik doğrulaması yapabilmesini sağlar. Oturum Yönetimi: Kullanıcıların oturumlarını yönetebilir ve oturum sürelerini kontrol edebilirsiniz. E-posta Doğrulama ve Parola Sıfırlama: E-posta doğrulama, parola sıfırlama ve e-posta bildirimi gibi işlemler sağlar. Kullanıcı Bilgileri Yönetimi: Kullanıcı bilgilerini (isim, adres, telefon vb.) depolamak ve yönetmek için özellikler içerir. .NET Core Identity Kurulumu Yeni Bir Proje Oluşturun

Visual Studio veya .NET CLI kullanarak yeni bir ASP.NET Core projesi oluşturun. Bu proje, .NET Core Identity ile çalışacak bir web uygulaması olabilir.

dotnet new mvc -n IdentityExample

Identity Paketlerini Kurun

Identity özelliklerini kullanabilmek için Microsoft.AspNetCore.Identity.EntityFrameworkCore paketini kurmanız gerekir. Bu, veritabanı tablosu oluşturma ve kullanıcı verilerini saklama işlemlerini kolaylaştırır.

dotnet add package Microsoft.AspNetCore.Identity.EntityFrameworkCore

DbContext Sınıfını Oluşturun

Identity sistemini kullanabilmek için, ApplicationDbContext adında bir DbContext sınıfı oluşturmanız gerekecek. Bu sınıf, Identity'nin veritabanı tablolarıyla iletişim kurmasına yardımcı olur.

using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;

public class ApplicationDbContext : IdentityDbContext
{
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
        : base(options)
    { }
}

Startup.cs Yapılandırması

Startup.cs dosyasını güncelleyerek, Identity'nin nasıl yapılandırılacağını belirlemeniz gerekmektedir.

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

    services.AddDefaultIdentity<IdentityUser>()
        .AddEntityFrameworkStores<ApplicationDbContext>()
        .AddDefaultTokenProviders();

    services.AddControllersWithViews();
}

Burada, DefaultIdentity metoduyla varsayılan kullanıcı yönetimini ekliyoruz. IdentityUser sınıfı, kullanıcıların temel özelliklerini (id, kullanıcı adı, e-posta vb.) içerir.

Veritabanı Migration'ları Uygulama

Veritabanı şemasını oluşturmak için migration komutlarını kullanabilirsiniz.

dotnet ef migrations add InitialCreate
dotnet ef database update

Kullanıcı Kaydı ve Oturum Açma Sayfaları

Identity, temel kullanıcı yönetim işlemleri için otomatik olarak birçok sayfa sağlar. Bu sayfalar, kullanıcıların kaydolmasını, giriş yapmasını, çıkış yapmasını ve parola sıfırlama işlemlerini gerçekleştirmelerini sağlar.

Bu sayfalara, projeye Identity'yi eklediğinizde, Account isimli bir denetleyici ve ilgili Razor View sayfaları otomatik olarak eklenir. Bu sayfaları özelleştirebilirsiniz.

Kullanıcı Kaydı ve Girişi Örnek olarak, kullanıcı kaydı için aşağıdaki gibi bir işlem yapılabilir:

public class AccountController : Controller
{
    private readonly UserManager<IdentityUser> _userManager;
    private readonly SignInManager<IdentityUser> _signInManager;

    public AccountController(UserManager<IdentityUser> userManager, SignInManager<IdentityUser> signInManager)
    {
        _userManager = userManager;
        _signInManager = signInManager;
    }

    [HttpPost]
    public async Task<IActionResult> Register(string username, string password)
    {
        var user = new IdentityUser { UserName = username };
        var result = await _userManager.CreateAsync(user, password);

        if (result.Succeeded)
        {
            await _signInManager.SignInAsync(user, isPersistent: false);
            return RedirectToAction("Index", "Home");
        }

        // Hata durumunda hata mesajı gösterme
        foreach (var error in result.Errors)
        {
            ModelState.AddModelError(string.Empty, error.Description);
        }
        return View();
    }
}

Kullanıcı Rolleri ve İzinler Identity ile kullanıcı rolleri oluşturup atayabilirsiniz. Örneğin, bir "Admin" rolü oluşturup kullanıcıya bu rolü atayabilirsiniz.

public class ApplicationSeeder
{
    public static async Task SeedRolesAndUsers(RoleManager<IdentityRole> roleManager, UserManager<IdentityUser> userManager)
    {
        string[] roleNames = { "Admin", "User" };
        foreach (var roleName in roleNames)
        {
            var roleExist = await roleManager.RoleExistsAsync(roleName);
            if (!roleExist)
            {
                await roleManager.CreateAsync(new IdentityRole(roleName));
            }
        }

        var user = await userManager.FindByEmailAsync("admin@example.com");
        if (user == null)
        {
            user = new IdentityUser { UserName = "admin@example.com", Email = "admin@example.com" };
            await userManager.CreateAsync(user, "Password@123");
        }

        await userManager.AddToRoleAsync(user, "Admin");
    }
}

Bu kod, "Admin" ve "User" adında iki rol oluşturur ve bir kullanıcıyı "Admin" rolüne atar.

Sonuç .NET Core Identity, güvenli ve kapsamlı bir kullanıcı yönetimi sağlamak için mükemmel bir araçtır. Kimlik doğrulama ve yetkilendirme işlemleri, şifre sıfırlama, rol bazlı erişim gibi özellikler sağlar. Ayrıca, veritabanı ile uyumlu çalışarak kullanıcı bilgilerini kolayca saklamanızı sağlar. .NET Core Identity, güçlü ve genişletilebilir bir güvenlik yapısı sunar, böylece web uygulamalarınızda güvenliği sağlamak için birçok önemli işlemi kolayca gerçekleştirebilirsiniz.

December 26, 2024