ASP.NET Identity’ye Giriş

ASP.NET üyelik sistemi 2005 yılında ASP.NET 2.0 ile kullanıma sunulmuştur ve o zamandan beri web uygulamalarının kimlik doğrulama ve yetkilendirmeyi işleme yöntemlerinde birçok değişiklik olmuştur. ASP.NET Identity, web, telefon veya tablet için modern uygulamalar oluştururken üyelik sisteminin ne olması gerektiğinin yeni bir görünümüdür.

Arka plan: ASP.NET'da üyelik

ASP.NET Üyeliği

ASP.NET Üyelik, 2005'te yaygın olarak kullanılan ve Forms Kimlik Doğrulaması ile kullanıcı adları, parolalar ve profil verileri için SQL Server veritabanı içeren site üyeliği gereksinimlerini çözmek için tasarlanmıştır. Günümüzde web uygulamaları için çok daha geniş bir veri depolama seçenekleri dizisi vardır ve çoğu geliştirici, sitelerinin kimlik doğrulaması ve yetkilendirme işlevselliği için sosyal kimlik sağlayıcılarını kullanmasını sağlamak istemektedir. ASP.NET Üyeliğinin tasarımının sınırlamaları bu geçişi zorlaştırıyor:

  • Veritabanı şeması SQL Server için tasarlanmıştır ve değiştiremezsiniz. Profil bilgileri ekleyebilirsiniz, ancak ek veriler farklı bir tabloda paketlenir ve bu da Profil Sağlayıcısı API'sinin dışında herhangi bir yolla erişmeyi zorlaştırır.
  • Sağlayıcı sistemi, yedekleme veri depolarını değiştirmenize olanak tanır, ancak sistem ilişkisel bir veritabanı için uygun varsayımlar etrafında tasarlanmıştır. Üyelik bilgilerini Azure Depolama Tabloları gibi ilişkisel olmayan bir depolama mekanizmasında depolamak için bir sağlayıcı yazabilirsiniz, ancak daha sonra NoSQL veritabanlarına uygulanmayan yöntemler için çok fazla kod ve çok sayıda System.NotImplementedException özel durum yazarak ilişkisel tasarıma geçici bir çözüm getirebilirsiniz.
  • Oturum açma/oturum kapatma işlevi Forms Kimlik Doğrulaması'nı temel alır, çünkü üyelik sistemi OWIN kullanamaz. OWIN, dış kimlik sağlayıcıları (Microsoft Hesapları, Facebook, Google, Twitter gibi) kullanarak oturum açma desteği ve şirket içi Active Directory veya Azure Active Directory'deki kuruluş hesaplarını kullanarak oturum açma işlemleri dahil olmak üzere kimlik doğrulaması için ara yazılım bileşenleri içerir. OWIN ayrıca OAuth 2.0, JWT ve CORS desteği de içerir.

Basit Üyeliği ASP.NET

ASP.NET basit üyelik , ASP.NET Web Sayfaları için üyelik sistemi olarak geliştirilmiştir. WebMatrix ve Visual Studio 2010 SP1 ile yayımlandı. Basit Üyelik'in amacı, Web Sayfaları uygulamasına üyelik işlevselliği eklemeyi kolaylaştırmaktı.

Basit Üyelik, kullanıcı profili bilgilerini özelleştirmeyi kolaylaştırdı, ancak ASP.NET Üyelik ile ilgili diğer sorunları paylaşmaya devam eder ve bazı sınırlamaları vardır:

  • Üyelik sistemi verilerini ilişkisel olmayan bir depoda kalıcı hale getirmek zor oldu.
  • OWIN ile kullanamazsınız.
  • Mevcut ASP.NET Üyelik sağlayıcılarıyla iyi çalışmaz ve genişletilebilir değildir.

ASP.NET Evrensel Sağlayıcılar

ASP.NET Evrensel Sağlayıcıları, üyelik bilgilerini Microsoft Azure SQL Veritabanı kalıcı hale getirmek için geliştirilmiştir ve SQL Server Compact ile de çalışırlar. Evrensel Sağlayıcılar, Entity Framework Code First üzerine kurulmuştur, yani Evrensel Sağlayıcılar EF tarafından desteklenen herhangi bir depodaki verileri kalıcı hale getirmek için kullanılabilir. Evrensel Sağlayıcılar ile veritabanı şeması da oldukça fazla temizlendi.

Evrensel Sağlayıcılar ASP.NET Üyelik altyapısını temel alır, bu nedenle SqlMembership Sağlayıcısı ile aynı sınırlamaları taşımaya devam ederler. Diğer bir ifadeyle ilişkisel veritabanları için tasarlanmıştır ve profil ve kullanıcı bilgilerini özelleştirmek zordur. Bu sağlayıcılar oturum açma ve oturum kapatma işlevleri için Forms Kimlik Doğrulamasını kullanmaya devam eder.

ASP.NET Kimlik

ASP.NET'daki üyelik hikayesi yıllar içinde geliştikçe, ASP.NET ekibi müşterilerden gelen geri bildirimlerden çok şey öğrendi.

Kullanıcıların kendi uygulamanıza kaydettikleri bir kullanıcı adı ve parola girerek oturum açacağı varsayımı artık geçerli değildir. Web daha sosyal hale geldi. Kullanıcılar Facebook, Twitter ve diğer sosyal web siteleri gibi sosyal kanallar aracılığıyla birbirleriyle gerçek zamanlı olarak etkileşime geçiyor. Geliştiriciler, kullanıcıların web sitelerinde zengin bir deneyim elde edebilmeleri için sosyal kimlikleriyle oturum açabilmelerini ister. Modern bir üyelik sisteminin Facebook, Twitter ve diğerleri gibi kimlik doğrulama sağlayıcılarına yeniden yönlendirme tabanlı oturum açmaları etkinleştirmesi gerekir.

Web geliştirme geliştikçe, web geliştirme desenleri de gelişti. Uygulama kodunun birim testi, uygulama geliştiricileri için temel bir sorun haline geldi. 2008 yılında ASP.NET, geliştiricilerin birim test edilebilir ASP.NET uygulamaları oluşturmasına yardımcı olmak için Model-View-Controller (MVC) desenini temel alan yeni bir çerçeve ekledi. Uygulama mantığını birim test etmek isteyen geliştiriciler de üyelik sistemiyle bunu yapabilmek istedi.

Web uygulaması geliştirmedeki bu değişiklikler göz önünde bulundurularak ASP.NET Kimliği aşağıdaki hedeflerle geliştirilmiştir:

  • Bir ASP.NET Kimlik sistemi

    • ASP.NET Identity, ASP.NET MVC, Web Forms, Web Sayfaları, Web API'si ve SignalR gibi tüm ASP.NET çerçeveleriyle kullanılabilir.
    • ASP.NET Identity web, telefon, mağaza veya karma uygulamalar oluştururken kullanılabilir.
  • Kullanıcı hakkındaki profil verilerini ekleme kolaylığı

    • Kullanıcı ve profil bilgilerinin şeması üzerinde denetime sahipsiniz. Örneğin, kullanıcılar uygulamanıza bir hesap kaydettiklerinde kullanıcıların girdiği doğum tarihlerini depolamak için sistemi kolayca etkinleştirebilirsiniz.
  • Kalıcılık denetimi

    • Varsayılan olarak, ASP.NET Identity sistemi tüm kullanıcı bilgilerini bir veritabanında depolar. ASP.NET Identity, tüm kalıcılık mekanizmasını uygulamak için Entity Framework Code First kullanır.
    • Veritabanı şemasını denetlediğinizden, tablo adlarını değiştirme veya birincil anahtarların veri türünü değiştirme gibi yaygın görevlerin yapılması kolaydır.
    • SharePoint, Azure Depolama Tablo Hizmeti, NoSQL veritabanları gibi farklı depolama mekanizmalarını özel durumlar oluşturmak System.NotImplementedExceptions zorunda kalmadan kolayca takabilirsiniz.
  • Birim test edilebilirliği

    • ASP.NET Identity, web uygulamasını daha test edilebilir hale getirir. Uygulamanızın ASP.NET Identity kullanan bölümleri için birim testleri yazabilirsiniz.
  • Rol sağlayıcısı

    • Uygulamanızın bölümlerine erişimi rollere göre kısıtlamanıza olanak tanıyan bir rol sağlayıcısı vardır. "Yönetici" gibi rolleri kolayca oluşturabilir ve rollere kullanıcı ekleyebilirsiniz.
  • Talep Tabanlı

    • ASP.NET Kimliği, kullanıcının kimliğinin bir talep kümesi olarak temsil edildiği talep tabanlı kimlik doğrulamasını destekler. Talepler, geliştiricilerin bir kullanıcının kimliğini açıklamada rollerden çok daha açıklayıcı olmasını sağlar. Rol üyeliği yalnızca bir boole (üye veya üye olmayan) olsa da, talep kullanıcının kimliği ve üyeliği hakkında zengin bilgiler içerebilir.
  • Sosyal Oturum Açma Sağlayıcıları

    • Microsoft Hesabı, Facebook, Twitter, Google ve diğer sosyal oturum açma bilgilerini uygulamanıza kolayca ekleyebilir ve kullanıcıya özgü verileri uygulamanızda depolayabilirsiniz.
  • OWIN Tümleştirmesi

    • ASP.NET kimlik doğrulaması artık herhangi bir OWIN tabanlı konakta kullanılabilen OWIN ara yazılımını temel alır. ASP.NET Kimliği'nin System.Web'e bağımlılığı yoktur. Tamamen uyumlu bir OWIN çerçevesidir ve OWIN barındırılan herhangi bir uygulamada kullanılabilir.
    • ASP.NET Identity, web sitesindeki kullanıcıların oturumunu açmak/oturumu kapatmak için OWIN Kimlik Doğrulamasını kullanır. Bu, uygulamanın tanımlama bilgisini oluşturmak için FormsAuthentication kullanmak yerine bunu yapmak için OWIN CookieAuthentication kullandığı anlamına gelir.
  • NuGet paketi

    • ASP.NET Identity, Visual Studio 2017 ile birlikte gelen ASP.NET MVC, Web Forms ve Web API şablonlarına yüklenen bir NuGet paketi olarak yeniden dağıtılır. Bu NuGet paketini NuGet galerisinden indirebilirsiniz.
    • NuGet paketi olarak ASP.NET Kimliği yayınlamak, ASP.NET ekibinin yeni özellikler ve hata düzeltmeleri üzerinde yinelemesini ve bunları geliştiricilere çevik bir şekilde sunmayı kolaylaştırır.

ASP.NET Identity'i kullanmaya başlama

ASP.NET Identity, ASP.NET MVC, Web Forms, Web API ve SPA için Visual Studio 2017 proje şablonlarında kullanılır. Bu kılavuzda, proje şablonlarının bir kullanıcıyı kaydetmek, oturum açmak ve oturumu kapatmak için işlevsellik eklemek için ASP.NET Kimliğini nasıl kullandığını göstereceğiz.

ASP.NET Identity aşağıdaki yordam kullanılarak uygulanır. Bu makalenin amacı size ASP.NET Kimliğine üst düzey bir genel bakış sağlamaktır; adım adım izleyebilir veya yalnızca ayrıntıları okuyabilirsiniz. Kullanıcıları, rolleri ve profil bilgilerini eklemek için yeni API'yi kullanma da dahil olmak üzere ASP.NET Identity kullanarak uygulama oluşturma hakkında daha ayrıntılı yönergeler için, bu makalenin sonundaki Sonraki Adımlar bölümüne bakın.

  1. Tek Tek Hesaplarla ASP.NET bir MVC uygulaması oluşturun. ASP.NET Identity'yi ASP.NET MVC, Web Forms, Web API,SignalR vb. Bu makalede bir ASP.NET MVC uygulaması ile başlayacağız.

    Yeni ASP nokta Net proje penceresinin resmi

  2. Oluşturulan proje, ASP.NET Kimliği için aşağıdaki üç paketi içerir.

    • Microsoft.AspNet.Identity.EntityFramework
      Bu paket, ASP.NET Kimlik verilerini ve şemasını SQL Server kalıcı hale getirmek için ASP.NET Identity Entity Framework uygulamasına sahiptir.
    • Microsoft.AspNet.Identity.Core
      Bu paket, ASP.NET Kimliği için temel arabirimlere sahiptir. Bu paket Azure Tablo Depolama, NoSQL veritabanları vb. gibi farklı kalıcılık depolarını hedefleyen ASP.NET Kimliği için bir uygulama yazmak için kullanılabilir.
    • Microsoft.AspNet.Identity.OWIN
      Bu paket, ASP.NET uygulamalarda ASP.NET Identity ile OWIN kimlik doğrulamasını takmak için kullanılan işlevleri içerir. Bu, uygulamanıza oturum açma işlevselliği eklediğinizde ve tanımlama bilgisi oluşturmak için OWIN Tanımlama Bilgisi Kimlik Doğrulaması ara yazılımını çağırdığınızda kullanılır.
  3. Kullanıcı oluşturma.
    Uygulamayı başlatın ve ardından kullanıcı oluşturmak için Kaydet bağlantısına tıklayın. Aşağıdaki görüntüde, kullanıcı adı ve parolayı toplayan Kaydet sayfası gösterilmektedir.

    Yeni hesap oluşturma resmi

    Kullanıcı Kaydet düğmesini seçtiğinde Hesap denetleyicisinin eylemi, Register aşağıda vurgulandığı gibi ASP.NET Kimlik API'sini çağırarak kullanıcıyı oluşturur:

    [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public async Task<ActionResult> Register(RegisterViewModel model)
    {
        if (ModelState.IsValid)
        {
            var user = new ApplicationUser() { UserName = model.UserName };
            var result = await UserManager.CreateAsync(user, model.Password);
            if (result.Succeeded)
            {
                await SignInAsync(user, isPersistent: false);
                return RedirectToAction("Index", "Home");
            }
            else
            {
                AddErrors(result);
            }
        }
    
        // If we got this far, something failed, redisplay form
        return View(model);
    }
    
  4. Oturum açın.
    Kullanıcı başarıyla oluşturulduysa yöntemiyle SignInAsync oturum açar.

     [HttpPost]
     [AllowAnonymous]
     [ValidateAntiForgeryToken]
    public async Task<ActionResult> Register(RegisterViewModel model)
    {
        if (ModelState.IsValid)
        {
            var user = new ApplicationUser { UserName = model.Email, Email = model.Email };
            var result = await UserManager.CreateAsync(user, model.Password);
            if (result.Succeeded)
            {
                 await SignInManager.SignInAsync(user, isPersistent:false, rememberBrowser:false);
                        
                 // For more information on how to enable account confirmation and password reset please visit https://go.microsoft.com/fwlink/?LinkID=320771
                 // Send an email with this link
                 // string code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);
                 // var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme);
                 // await UserManager.SendEmailAsync(user.Id, "Confirm your account", "Please confirm your account by clicking <a href=\"" + callbackUrl + "\">here</a>");
    
                 return RedirectToAction("Index", "Home");
             }
             AddErrors(result);
         }
    
        // If we got this far, something failed, redisplay form
         return View(model);
     }
    

    SignInManager.SignInAsync yöntemi bir ClaimsIdentity oluşturur. ASP.NET Kimliği ve OWIN Tanımlama Bilgisi Kimlik Doğrulaması talep tabanlı sistem olduğundan, çerçeve uygulamanın kullanıcı için bir ClaimsIdentity oluşturmasını gerektirir. ClaimsIdentity, kullanıcının hangi rollere ait olduğu gibi kullanıcının tüm talepleri hakkında bilgi içerir.

  5. Oturumu kapatın.
    Hesap denetleyicisinde LogOff eylemini çağırmak için Oturumu kapat bağlantısını seçin.

    // POST: /Account/LogOff
    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult LogOff()
    {
        AuthenticationManager.SignOut();
        return RedirectToAction("Index", "Home");
    }
    

    Yukarıdaki vurgulanan kod OWIN AuthenticationManager.SignOut yöntemini gösterir. Bu, Web Forms'da FormsAuthentication modülü tarafından kullanılan FormsAuthentication.SignOut yöntemine benzer.

ASP.NET Kimliği bileşenleri

Aşağıdaki diyagramda ASP.NET Kimlik sisteminin bileşenleri gösterilmektedir (bunu büyütmek için bu veya diyagramda öğesini seçin). Yeşil renkli paketler ASP.NET Kimlik sistemini oluşturur. Diğer tüm paketler, ASP.NET uygulamalarında ASP.NET Kimlik sistemini kullanmak için gereken bağımlılıklardır.

A S P nokta Net kimlik sisteminin bileşenlerini gösteren diyagram

Aşağıda, daha önce bahsedilmeyen NuGet paketlerinin kısa bir açıklaması yer aldı:

  • Microsoft.Owin.Security.Cookies
    Bir uygulamanın ASP'ye benzer şekilde tanımlama bilgisi tabanlı kimlik doğrulaması kullanmasını sağlayan ara yazılım. NET'in Forms Kimlik Doğrulaması.
  • EntityFramework
    Entity Framework, Microsoft'un ilişkisel veritabanları için önerdiği veri erişim teknolojisidir.

Üyelikten ASP.NET Kimliğe Geçiş

yakında ASP.NET Üyelik veya Basit Üyelik kullanan mevcut uygulamalarınızı yeni ASP.NET Kimlik sistemine geçirme konusunda rehberlik sağlamayı umuyoruz.

Sonraki Adımlar