Derinlemesine yazılım eğitimleri için kanalımı takip edebilirsiniz...

Asp.NET Core Identity – Nedir ve Temel Kavramlar? – I

Merhaba,

Üretim, insanoğlunun fıtratında tüketim, güç ve yönetim olamak üzere üç farklı duyguyu tetiklemektedir. Bunlardan birisi vardır ki diğerlerine nazaran daha çok ön plana çıkmakta ve ağır basmaktadır. O da yönetimdir. İnsanoğlunun ürettiğini istediği zaman kendi iradesince tüketebilme özgürlüğüne sahip olması dolaylı yoldan ona güç kazandırmıştır. Bu güç arttıkça insan kendi kabuğuna sığamamış ve önce çevresine, sonra yaşadığı ülkeye ve sonrada tüm dünyaya etkisini göstermek istemiş ve bu isteğini tekrar ürettikleriyle besleyip bir şekilde dönüp dolaşıp üretileni diğer insanlara da eriştirmeye yönelmiş ve bu erişim neticede yönetme içgüdüsüyle bütünleşmiştir. İnsan ürettiğini, tüketmekten çok yönetmek istemiştir. Ve en nihayetinde on binlerce yıl bu hormonal duygular insanın fıtratında sağlam yer edinmiş ve günümüz dünyasına üretenler tarafından yönetilen bir beşeriyet olarak yansımıştır.

Şuana, bu gelişim sürecinde yönetme içgüsüne fazladan yatırım yaparak gelmiş olan insanoğlu çağa uygun olarak ürettiği her ne ise doğal olarak onuda yönetmek istemekte ve bu iradenin tüm üretilene detaylarıyla nüfus edebilmesi için yeni yaklaşımlar ve yapılar geliştirmektedir. Bulunduğumuz çağ, yeryüzünde çok az etkileşimden uzak bölge ve lokal kültür barındırmakta, büyük kısmı globalleşmenin doruk noktasında bir dünya ile karşı karşıya bulunmaktadır. İnsanlığa tarih süresince eşlik eden birçok meslek artık yok olmuş ya da yok olmanın eşiğinde iken gelecek çağlara zemin oluşturacak nice mesleklere gebelik söz konusu olmakta yahut bazılarının erişkinlik dönemi yaşadığı bariz ortadadır. Şöyle bir düşünsek bu mesleklerden birçoğu masaya yatırılabilir ama bir tanesi vardır ki tartışmasızdır. O meslekte ‘Yazılım Geliştiriciliği’dir.

Bugünün büyük bir kısmını ve muhtemelen geleceğin komplesini ne yazık ki makinelere bırakan insanoğlu, dolayısıyla bu makinelerle etkileşim içerisinde olan tüm mesleklere yaşam hakkı tanımış bulunmakta bilakis alakası olmayanları ise belki bundan milyonlarca yıl sonraki arkeologların tesadüfen karşılaşabilecekleri bulguların insafına bırakmaktadır… Velhasıl fazla uzağa gidip karanlık olan geleceği hak ettiği karamsar pencereyle değerlendirerek içeriğimizi bunaltıcı hale getirmekten ziyade esas konumuza geri dönsek yerinde olacaktır sanırım…

Yukarıda da bahsetmeye çalıştığım gibi insanoğlunun fıtratındaki yönetim içgüdüsü günümüzdeki yazılım uygulamalarında da kendisini göstermekte ve çağın büyük markaları (Google, Microsoft, Facebook vs.) ürettikleri sistemi, o sistemi kullanacak olan tüketicilere tam yetki ve iradeyle sağladığı yönetim üzerinden sunmaktadırlar. Keza fıtratın desteğiyle yaygınlaşan bu gelenek tarafımızca geliştirilen uygulamalar üzerinde de devam etmekte ve tüm yazılımlar geliştiriciler yahut patronlar tarafından yönetilmektedirler.

Bu yönetim ihtiyacı artık günlük hayatta temel ihtiyaç olarak yer edinmiştir. Dolayısıyla biz yazılım geliştiricilerininde son kullanıcılarla etkileşim içerisinde olduğu web uygulamalarında da hat safhada önem arz etmektedir. Bu içeriğimizin konusu; web uygulamalarına üye olacak kullanıcılar üzerinde kimlik yetkilendirme ve doğrulama yöntemlerini detaylarıyla uygulamamızı sağlayacak olan ve böyleyece a’dan z’ye yönetebilmemize imkan sunacak olan Identity frameworkünün ne olduğuna dair, temel kavramlarıyla birlikte istişare üzerine olacaktır.

Asp.NET Core Identity Nedir?

Asp.NET uygulamalarında eski üyelik sistemi Membership yerine geliştirilen ve üyelerin erişebilirliğiyle ilgili daha geniş kapsama sahip olmakla birlikte yönetilebilirlik açısından daha derin ve daha esnek ve tüm bunların yanında sınırsız özelleştirilebilir niteliğe sahip olan bir üyelik sistemi frameworküdür.

Asp.NET Core Identity; üyelerin, login(giriş), out(çıkış), yetkilendirme, token, şifre hatırlatma vs. tüm işlemleri hızlı bir şekilde gerçekleştirmemizi sağlayan ve bunların dışında önceki nesillere nazaran herhangi bir kısıtlaması olmaksızın uygulamalarımızı destekleyen çağdaş bir üyelik sistemidir. Çağdaştır çünkü gündümüzdeki üçüncü kaynaklardan sağlanan modern oturum süreçlerini(Facebook Login, Google Login, Twitter Login vs.) desteklemekte ve tüm inşayı hızlı bir şekilde gerçekleştirmektedir. Tabi burada iştahı kabaranlara şifa olması niyetiyle, bahsedilen tüm operasyonların ilerideki makalelerde tek tek derinlemesine ele alınacağını şimdiden bildirmekte fayda var…

Asp.NET Core Identity kütüphanesini varsa diğerlerinden ayıran ve lehine puan kazandıran en büyük özelliği esnek olmasıdır. Yani sağladığı özelliklerden tarafımızca beğenilmeyen yahut daha iyisi düşünülebilen sistemler custom olarak geliştirilebilmekte ve çok rahat bir şekilde uygulamaya identity üzerinden entegre edilebilmektedirler. İşte bu özelliğide büyük fark yaratmakta ve bizleri gelişmenin ileriki noktalarında olası uyumsuzluk şüphelerinden kurtarmaktadır. Keza bu özellik, önceki Membership üyelik sisteminden Identity’i ayıran en büyük farkı yaratmaktadır.

Temel Kavramlar

Bizler tüm içeriklerimizde ilgili yapıları kuramsal olarak temellendirmeyi ve kavramsal olarak terminolojiyi destekler nitelikte ilerlemeyi tercih ediyoruz. O yüzden giriş seviyesindeki bu içeriğimizde ilk olarak temel kavramların bir kısmını ele almakta fayda görmekteyim.

Herşeyden önce üyelik sistemi(Asp.NET Core Identity) deyince şu dört kavramın izahını yapabilmek gerekmektedir;

  • Authentication
    Kullanıcının sistem tarafında tanımlanan kişi olup olmadığının doğrulanmasıdır. Bir başka deyişle kimlik doğrulamasıdır.
  • Authorization
    Sistemde doğrulanan kullanıcının hangi sınırlara sahip olduğunun belirlenmesidir. Bunada da kimlik yetkilendirmesi diyebiliriz.
  • Claims
    Doğrulanmış kullanıcıya açılmış oturum üzerinde kullanıcı kendisine has bilgileri Claims yapısı aracılığıyla tutabilmektedir. Örneğin; kullanıcı adı ve şifre ile doğrulanmış kullanıcının köpeğinin adını claim ile o oturumda taşıyabilmekteyiz.
  • Third Party Authentication
    Üçüncü taraf kimlik doğrulamadır. Facebook, Google, Twitter vs. gibi doğal ve organik yollarla kişilerin tanımlandığı ve insanlığa mal olmuş hali hazırda kullanılan sistemler üzerinden gerçekleştirilen kimlik doğrulamasıdır.

Bir Web Uygulamasında Asp.NET Identity Kütüphanesinin Kullanılabilmesi İçin Yapılması Gerekenler

Bir Asp.NET Core uygulamasında Identity üyelik sisteminin kullanılabilmesi için Microsoft.AspNetCore.Identity kütüphanesinin ilgili projeye entegre edilmiş olması yeterlidir. Bunun için bizlerin ekstradan bir işlem yapmasına gerek yoktur. Çünkü ilgili kütüphane varsayılan olarak Core projelerinde dahili bir şekilde gelmektedir.

Nihai olarak bu içeriğimizde Asp.NET Core Identity kütüphanesinin ne olduğuna dair fikir edinmiş ve bazı genel geçer kavramlar üzerinde izahatte bulunmuş olduk. Bir sonraki yazımızda Asp.NET Core uygulamasında Identity yapılanmasının temelden nasıl ayağa kaldırılacağına dair detaylıca konuşacağız. O halde şimdilik görüşmek üzere 🙂

İlgilenenlerin faydalanması dileğiyle…
İyi çalışmalar…

Bunlar da hoşunuza gidebilir...

21 Cevaplar

  1. Özkan dedi ki:

    Merhaba,
    Aşağıdaki metindeki “köpeği” kelimesi ile neyi kastettiğinizi anlamadım

    “Claims
    Doğrulanmış kullanıcıya açılmış oturum üzerinde kullanıcı kendisine has bilgileri Claims yapısı aracılığıyla tutabilmektedir. Örneğin; kullanıcı adı ve şifre ile doğrulanmış kullanıcının köpeğinin adını claim ile o oturumda taşıyabilmekteyiz.”

    • Gençay dedi ki:

      Merhaba,

      Claim’ler de istediğiniz herhangi bir veriyi tutup taşıyabileceğinizin örneklendirmesini yapabilmek için “kullanıcının köpeğinin adını dahi tutabilirsiniz” manasında örneklendirmede bulundum.

      Kolay gelsin.

  2. nurullah dedi ki:

    Merhaba hocam,

    List userClaims = new List();
    userClaims.Add(new Claim(ClaimTypes.NameIdentifier, userToLogin.DealerId.ToString()));
    userClaims.Add(new Claim(ClaimTypes.Name, userToLogin.Name));
    var claimsIdentity = new ClaimsIdentity(userClaims, CookieAuthenticationDefaults.AuthenticationScheme);
    HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme,new ClaimsPrincipal(claimsIdentity));
    return RedirectToAction("Index", "Home");
    

    Böyle bir oturum açma isteğinde bulunduk diyelim ki, burda Claimde tutulan bilgileri diğer sayfalarda nasıl okumalıyız.

    CookieOptions cookie = new CookieOptions();
    cookie.Expires = DateTime.Now.AddYears(10);
    Response.Cookies.Append("username", username, cookie);
    Response.Cookies.Append("password", password, cookie);
    

    yada bu yöntemimi kullanmalıyız.
    Ben kısa oturum yönetimini hangi şekilde daha sağlıklı yapabilirim.
    .net core kullanıyorum ve çok yeni başladığım içim tam olarak oturtamadım.

    • Gençay dedi ki:

      Merhaba,

      Bu makale serisini a’dan z’ye uygulayarak okumanı tavsiye ediyorum Nurullah. Nihayetinde burada sana uzun uzun anlatacaklarım serinin mahiyetiyle eşdeğer olacaktır.

  3. Ahmet dedi ki:

    Konuyu hemen öğrenmek için aceleyle okumaya başladım. Baştaki üretici-yönetici hakkındaki paragrafları her ne kadar atlamak istesem de merakımı celbetti, dikkatlice okudum. Güzel tespitler.

    • Gençay dedi ki:

      Her ne kadar yazılım geliştirici olsakta esas ilgi alanlarım içerisine sosyoloji ve tarihte girmektedir 😜 Yani değinmeden rahat edemezdim 🙂

  4. Burak dedi ki:

    Çok teşekkürler.

  5. Selin dedi ki:

    Merhaba öncelikle bir süredir asp.net core ile ilgileniyorum. Yazılarınızdan istifade ettiğim de çok oldu. Bunun için teşekkür ediyorum. Ancak yazınızdaki üretmek- tüketmek-yönetmek kısmıyla web sitelerindeki authorization anlayışının alakası olduğunu düşünmüyorum. Bir web sitesi yaptım hadi yöneteyim motivasyonuyla authorization işlemi yapıldığını hiç görmedim. Kişisel bilgileri güvende tutmak, belli yaş altına sayfayı göstermemek gibi pratik ve mantıklı sebeplerle authorization işlemleri yapılmakta. İyi günler dilerim.

  6. Abdullatif dedi ki:

    hocam sizin bahsettiğiniz kütüphane ile “Microsoft.AspNetCore.Identity.EntityFrameworkCore” kütüphanesinin bir farkı var mı? ben entity Framework kullanıyorum da

  7. Ahmet dedi ki:

    hocam, katmanlı mimariye identity’i nasıl implemente edeceğiz ?

    core, data, service, api, mvc şeklinde beş katmanım var.

    şu an mevcut yapıda hem core hem hem data hem de presentation katmanlarında identity kullanmam gerekiyor.

    coreda appuser:identityuser şeklinde kalıtım yapacağım entityler haliyle bu katmanda olacak.

    datada zaten contextim var appcontext:identitydbcontext yapmam lazım yine identity kütüphanesine ihtiyacım var

    presentationda ise zaten authentication vs işlemlerim olacak startup dosyam da burada olacak burada da identity kullanmaya mecburum.

    hülasa, birden fazla katmana identity kütüphanesini eklesem sıkıntı yaşar mıyım ? Ya da hangi katmana eklemeliyim bir türlü işin içinden çıkamadım.

    Teşekkürler.

  8. Betül dedi ki:

    Konuya muazzam giriş… Gencay hocam denemeler yazmalısınız biz de okumalıyız tabi 🙂

  9. Semih Şenocak dedi ki:

    Emeğinize sağlık

  10. FARUK dedi ki:

    Yalnızca teşekkür etmek istiyorum. Bu kişisel web sayfanız o kadar yararlı içerik ile dolu ki; hiç işim gücüm olmasa bile oturup aylar yıllar tane tane okuyup uygulama yapmak isterliği doğuyor içimde. Sizin bilgi seviyenize gelsem ne keyiflenirim tahmin bile edemiyorum. Size burdan sözüm olsun bundan yıllar sonra yazılım alanında her şeyi tane tane izah eden biri olduğumda insanlara yardım elini uzatmaktan zerre geri durmayacağım ve aklıma hep sizin geniş gönüllü oluşunuz gelecek kıymetli insan. Esenlikler diliyorum. Hoş kal.

  11. Murat Yeşilbaş dedi ki:

    Merhabalar,

    Yaklaşık 25 yıldır yazılımcı olarak sektörde aktif olarak çalışmaktayım. Bu kütüphaneye nedense hep temkinli yaklaştım ve HİÇ KULLANMADIM.

    Kısmetse yeni bir projeye başlayacağım, sosyal medya desteği isteniyor, aklımın köşesinde koca bir ACABA bulunuyor.

    Profesyonel uygulamalarında bu kütüphaneyi kullanan var mı? (Ör: Bankacılık/Finans sektöründe) Sektörde kullanılan uygulamalarda da pek kullanan görmedim.

    Siz ne dersiniz? 40 yaşından sonra maceraya girelim mi?

    Teşekkürler.

  1. 10 Ağustos 2019

    […] Asp.NET Core Identity – Nedir ve Temel Kavramlar? – I […]

  2. 10 Ağustos 2019

    […] önceki Asp.NET Core Identity – Nedir ve Temel Kavramlar? – I başlıklı içeriğimizde Asp.NET Core Identity kütüphanesine dair teorik olarak bir giriş […]

  3. 11 Ağustos 2019

    […] önceki Asp.NET Core Identity – Nedir ve Temel Kavramlar? – I başlıklı içeriğimizde Asp.NET Core Identity kütüphanesine dair teorik olarak bir giriş […]

  4. 15 Eylül 2019

    […] Asp.NET Core Identity – Nedir ve Temel Kavramlar?  Gençay Yıldız […]

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir