.net6 identity 1-Temel kavramlar(Autentication,autherization,Claim,Role,RoleClaim,Stores,Managers)
Bir projeye başlarken düşünmemiz gereken önemli noktalardan biride autentication ve autherization dır.
Autentication : Kimlik doğrulama işlemidir. Bir uygulamaya login olduğumuzda uygulama tarafından bize bir “token” verilir. Token uygulamanın kapısını açmamızı sağlayan eşsiz bir anahtardır.
Yazılımda token uygulama tarafında anlamlandırılan string bir değerdir. Bize bu anahtarı veren uygulama kendi içerisinde bu anahtarı saklar. Kimlik doğrulama sırasında verdiği anahtarın doğruluğunu kontrol eder.
Uygulamalar farklı tekniklerle (örnek : JWT) verilen anahtarı kendi üzerinde depolamadan kimlik bilgilerini anahtar üzerinde taşıyabilir. Bu sayede ek veri tabanı işlemlerinden kurtulabiliriz. İlerleyen makalelerde JWT konusuna değineceğiz.
Autherization : Özel yetkilendirme işlemleridir. Kimlik doğrulamanın ardından bazı işlemler için özel yetkilendirmeler yapmak isteyebiliriz. Örneğin bu işlemi sadece admin rolüne sahip kişiler yapabilsin.
Claim : Uygulama tarafından kullanıcıya verilen token’a ek bilgiler eklemek istediğimizde claim yardımımıza koşar. Örneğin kullanıcının bulunduğu departman bilgisini , telefon bilgisini claim olarak kimlik kartına ekleyebiliriz.
Claim key-value çiftidir. Bir özelliğin değerini içerir. Birinci değer claimtype 2 . değer claim value dur.
Autentication ve autherization yapılarının birbirinden farklı diller tarafından değerlendirilmesi önemli bir konudur. Oluşturulan bir kimlikte token da taşınan claimlerin tipleri bir standart ile belirlenmesi bu acıdan önem arz eder.
System.Security.Claim sınıfı içinde bu standartı görebiliriz.
Role : Kullanıcıya atanan özel bir claim bilgisidir. Örneğin Role: Administrator
Kullanıcıyı rollere atayıp role bazlı yetkilendirmeler yapmak için kullanılır.
RoleClaim: Rollerle alakalı ek bilgileri roleclaim ile role sahip olan tüm kullanıcılara aktarabiliriz. Sistemimizde her işlemin bir yetki koduna sahip olduğunu düşünün (Kullanıcı eklemek :1, kullanıcı silmek:2) gibi.
Yeni kullanıcı yaratırken ona bu yetkileri atamamız gerekiyor. Her kullanıcı için 1,2…. yetkilerine sahiptir demek yerine bir role yaratıp bu yetkileri claim olarak role’e ekleriz. Kullanıcı bu role sahip olduğunda tüm yetkileri almış olur.
.net Identity ile tüm kimlik işlemleri için yardımımıza koşar. Öğrencilerimden çokca duyduğum neden sistemimin kimlik doğrulama yapısını herkes tarafından kullanılabilen bir yapı üstünden yapayım. Neden Identity ?
Önemli anahtar kelimelerden birisi minimum güvenlik ihtiyaçlarını sunar ve genişletebilir.
Ayrıca bir kimlik siteminin ihtiyacı olan :
Password Hasing : Kullanıcı şifrelerinin haslenerek sistemde tutulması
User& Password Validation : Kullanıcı bilgilerinin veya şifresine validation eklenmesi. (Örnek şifre min 6 karakter olsun)
Password Reset & Email Configuration : Şifre yenileme ve email doğrulama işlemleri.
User Lockout : Kullanıcının hesabının kitlenmesi. Bunu belli şifre hatasında otomotik yapacağı gibi. Bize verdiği usermanager sınıfı sayesinde herhangi bir anda kitlemeye imkan sağlar.
Multi-Factor Autentication : Çok adımlı kimlik doğrulama işlemi. Örneğin şifremizi girdikten sonra anlık ve belli süre geçerli bir code un istenmesi.
External Identities : Facebook login , google login gibi sistemler üzerinden kimlik doğrulaması yaparak uygulamaya giriş sağlanması.
İlerleyen makalelerde bu konulara değineceğiz.
Identity ve Entity Fremawork
Identity entity fremwork ile birlikte çalışan bir yapıya sahiptir. Bu sayede identity yapımızın veri tabanındaki karşılığını düşünmek zorunda kalmayız.
Custom Stores
Aklınıza şöyle bir soru geldiği duyar gibiyim. EF kullanmıyorum bu durumda Identity kullanamayacak mıyım?
“Genişleyebilir bir yapı sunar” kelimesinin altını burada doldurmaya başlar. Custom bir userstore yazabiliriz.
public class UserStore : IUserStore<IdentityUser>, IUserClaimStore<IdentityUser>, IUserLoginStore<IdentityUser>, IUserRoleStore<IdentityUser>, IUserPasswordStore<IdentityUser>, IUserSecurityStampStore<IdentityUser> {
// interface implementations not shown }
Custom store oluşturarak kullanıcı ekleme silme gibi işlemleri istediğimiz bir storeda tutabiliriz.
Managers
UserManager: Kullanıcı merkezli tüm işlemleri kapsayan storela birlikte çalışan sınıftır. Örneğim yeni bir kullanıcı eklemek istiyorsak bunu store üzerinden değil usermanager üzerinden yaparız.
Kullanıcıya claim ekleme ve claim sahiplik sorgulama işlemide bu sınıftadır.
RoleManager: Role merkezli tüm işlemleri kapsayan sınıftır. Örneğin role ekleme.
SigninManager: Kullanıcı kimlik doğrulama işlemlerini barındıran sınıftır.
Örneğin kullanıcı adı ve şifre ile login yapmak istediğimizde manuel olarak şifre ve kullanıcı kontrolü yapmamıza gerek yoktur. SigninManager bu konuda hertürlü ihtiyacımızı karşılar.
Özet:
İdentity bize çok yetenekli ve genişleyebilen bir yapı sunmaktadır. Güvenlik olarak güncel hashleme ve şifreleme tekniklerini kullanır. Hasleme ve şifreleme algooritmalarınıda değiştirme imkanı sunar.
Verilerin store işlemleri için genişletilebilir bir yapı sunar. Verilerimizi Entity fremwork kullanarak store etmek istersek işimiz çok daha kolaylaşır.