Aracılığıyla paylaş


ASP.NET Kimliğine 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.

En güvenli güvenli kimlik doğrulama seçeneğini kullanmanızı öneririz. Azure'a dağıtılan .NET uygulamaları için bkz:

Azure Key Vault ve .NET Aspire, gizli bilgileri depolamak ve almak için en güvenli yolu sunar. Azure Key Vault, şifreleme anahtarlarını ve sertifikalar, bağlantı dizeleri ve parolalar gibi gizli dizileri koruyan bir bulut hizmetidir. .NET Aspire için bkz. Barındırma ve istemci tümleştirmeleri arasında güvenli iletişim.

Kaynak Sahibi Parola Kimlik Bilgisi Yetkilendirme'sinden kaçının çünkü:

  • Kullanıcının parolasını istemciye gösterir.
  • Önemli bir güvenlik riskidir.
  • Yalnızca diğer kimlik doğrulama akışları mümkün olmadığında kullanılmalıdır.

Uygulama bir test sunucusuna dağıtıldığında, bağlantı dizesini test veritabanı sunucusuna ayarlamak için bir ortam değişkeni kullanılabilir. Ortam değişkenleri genellikle düz, şifrelenmemiş metinde depolanır. Makine veya işlemin güvenliği ihlal edilirse ortam değişkenlerine güvenilmeyen taraflar tarafından erişilebilir. Üretim bağlantı dizesini depolamak için ortam değişkenlerini kullanmaktan kaçınmanızı öneririz çünkü bu en güvenli yaklaşım değildir.

Yapılandırma verileri yönergeleri:

  • Parolaları veya diğer hassas verileri hiçbir zaman yapılandırma sağlayıcısı kodunda veya düz metin yapılandırma dosyalarında depolamayın.
  • Geliştirme veya test ortamlarında üretim sırlarını kullanmayın.
  • Proje dışındaki gizli bilgileri belirleyerek yanlışlıkla bir kaynak kod deposuna eklenmemelerini sağlayın.

Arka Plan: ASP.NET Üyeliği

ASP.NET Üyeliği

ASP.NET Üyelik, 2005'te yaygın olarak kullanılan ve Form Kimlik Doğrulaması ile kullanıcı adları, parolalar ve profil verileri için bir 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 geliştiricilerin çoğu 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 tabloya eklenir 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 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 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 durumu 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ındığından, üyelik sistemi OWINkullanamaz. 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şenlerini içerir. OWIN ayrıca OAuth 2.0, JWT ve CORS için destek içerir.

ASP.NET Basit Üyelik

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 Üyeliği 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, Microsoft Azure SQL Veritabanı'nda üyelik bilgilerini kalıcı hale getirmek için geliştirilmiştir ve SQL Server Compact ile de çalışır. 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ı üzerinde oluşturulduğundan, SqlMembership Sağlayıcısı ile aynı sınırlamaları taşımaya devam ederler. Yani 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 Kimliği

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 yaşamaları için sosyal kimlikleriyle oturum açabilmelerini istiyor. Modern üyelik sistemi, Facebook, Twitter ve diğerleri gibi kimlik doğrulama sağlayıcılarına yeniden yönlendirme tabanlı oturum açmaları etkinleştirmelidir.

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'de 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 testi yapmak 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:

  • One ASP.NET Identity sistemi

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

    • Kullanıcı ve profil bilgilerinin şeması üzerinde denetiminiz vardır. Örneğin, uygulamanıza bir hesap kaydeden kullanıcılar tarafından girilen doğum tarihlerini depolamak için sistemi kolayca etkinleştirebilirsiniz.
  • Kalıcılık denetimi

    • varsayılan olarak, ASP.NET Kimlik 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örevleri yapmak kolaydır.
    • SharePoint, Azure Depolama Tablo Hizmeti, NoSQL veritabanları gibi farklı depolama mekanizmalarını System.NotImplementedExceptions özel durumlar oluşturmak zorunda kalmadan kolayca takabilirsiniz.
  • Birim test edilebilirliği

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

    • Uygulamanızın bazı 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 tanımlarken rollerin izin verdiğinden çok daha ifadeli olmalarını sağlar. Rol yalnızca mantıksal değişken (ü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ı

    • Uygulamanıza Microsoft Hesabı, Facebook, Twitter, Google ve diğerleri gibi sosyal oturum açma bilgilerini kolayca ekleyebilir ve kullanıcıya özgü verileri uygulamanızda depolayabilirsiniz.
  • OWIN Entegrasyonu

    • ASP.NET kimlik doğrulaması artık OWIN tabanlı herhangi bir konakta kullanılabilen OWIN ara yazılımını temel alır. ASP.NET Kimliğin System.Web'de herhangi bir bağımlılığı yoktur. Tamamen uyumlu bir OWIN çerçevesidir ve OWIN tarafından 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 çerezi oluşturmak için FormsAuthentication kullanmak yerine, bu çerezi oluşturmak için OWIN CookieAuthentication kullandığı anlamına gelir.
  • NuGet paketi

    • ASP.NET Kimliği, 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.
    • ASP.NET Identity'i NuGet paketi olarak yayınlamak, ASP.NET ekibinin yeni özellikler ve hata düzeltmelerini yinelemesini ve bunları geliştiricilere çevik bir şekilde sunmesini kolaylaştırır.

ASP.NET Kimliğ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ı kaydetme, oturum açma ve oturumu kapatma işlevleri eklemek için ASP.NET Kimliğini nasıl kullandığını göstereceğiz.

ASP.NET Kimliği 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 takip edebilir veya yalnızca ayrıntıları okuyabilirsiniz. Yeni API'yi kullanarak kullanıcı, rol ve profil bilgileri eklemek de 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 Hesaplar ile bir ASP.NET MVC uygulaması oluşturun. ASP.NET Kimliğini ASP.NET MVC, Web Forms, Web API, SignalR vb. içinde kullanabilirsiniz. Bu makalede bir ASP.NET MVC uygulamasıyla başlayacağız.

    Yeni ASP dot Net proje penceresinin görüntüsü

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

    • Microsoft.AspNet.Identity.EntityFramework
      Bu paket, ASP.NET Kimlik verilerini ve şemasını SQL Server'da 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 Identity için bir uygulama yazmak için kullanılabilir.
    • Microsoft.AspNet.Identity.OWIN
      Bu paket, ASP.NET uygulamalarında 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 çerez oluşturmak için OWIN Çerez Kimlik Doğrulama 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 Register sayfası gösterilmektedir.

    Yeni hesap oluşturma görüntüsü

    Kullanıcı Kaydet düğmesini seçtiğinde, Hesap denetleyicisinin Register eylemi 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ç.
    Kullanıcı başarıyla oluşturulduysa, SignInAsync yöntemiyle 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, ClaimsIdentityüretir. ASP.NET Identity ve OWIN Çerez Kimlik Doğrulaması talep tabanlı bir sistem olduğundan, framework kullanıcının 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 diyagram, ASP.NET Kimlik sisteminin bileşenlerini gösterir (bu'yi veya diyagramı seçerek büyütmek için tıklayın). 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 sistemi bileşenlerini gösteren Diyagramı

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

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

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

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

Sonraki Adımlar