Kimlik Doğrulama (Authentication) Nedir?

Kimlik doğrulama, bir kullanıcının veya programın bir sisteme erişirken kim olduğunu kanıtlama işlemidir. Kimlik doğrulama teknolojisi, bir kullanıcının kimlik bilgilerinin yetkili kullanıcıların veri tabanında veya bir veri doğrulama sunucusundaki kimlik bilgileriyle eşleşip eşleşmediğini kontrol ederek sistemler için erişim kontrolü sağlar.

Kullanıcılar günümüz sistemlerinde kimlik doğrulama işlemi için genellikle sisteme kayıt olurken belirledikleri parolalarını kullanırlar. Birçok şirket, web sitelerine giriş yapan kullanıcıları doğrulamak için kimlik doğrulamasını kullanır. Doğru güvenlik önlemleri olmadan, kredi ve banka kartı numaraları gibi gizli olması gereken kullanıcı verileri hackerların eline geçebilir.

KİMLİK DOĞRULAMA (AUTHENTİCATİON) NEDİR

Kimlik doğrulama nasıl çalışır?

Kimlik doğrulama sırasında, kullanıcı tarafından girilen kimlik bilgileri, giriş yapmak istediği sistemdeki veri tabanında bulunan kimlik bilgileri ile karşılaştırılır. Kimlik bilgileri eşleşirse kullanıcıya erişim izni verilir. Kullanıcının erişebileceği dizinler ve yapabileceği işlemler, giriş yapmış olduğu hesabın sistemde tanımlı olan yetkileri ile belirlenir.

Kimlik doğrulama faktörleri:

Kimlik doğrulama faktörlerini iki kısma ayırabiliriz:

Basit Kimlik Doğrulama:

Bu doğrulama faktöründe kullanıcı genellikle basit kimlik bilgisine sahiptir:

  • Kullanıcı Adı (Genelde e-posta adresi)
  • Belirlenen parola bilgisi.

Bu kimlik doğrulama şekli, basit kimlik doğrulaması olarak bilinir.

Güçlü Kimlik Doğrulama:

Genellikle gelişmiş güvenlik önlemlerine sahip sistemlerde kullanılan Güçlü Kimlik Doğrulama teknolojisi, kullanıcının sisteme giriş yaparken kullanıcı adı ve parolanın yanında çeşitli doğrulama şekilleri de sunar.
Günümüzde kullanılan kimlik doğrulama faktörleri şunlardır:

  • Bilgi faktörü: Bilgi faktörü, kişisel kimlik numarası (PIN), tek kullanımlık şifre, kullanıcı adı, parola veya gizli bir sorunun cevabı dâhil olmak üzere kullanıcının sahip olduğu bilgilerden oluşan kimlik doğrulama bilgileri olabilir.
  • Kalıtım faktörü: Kalıtım faktörü, parmak veya başparmak izleri, yüz tanıma, retina taraması gibi kişiye özel fiziksel özellik bilgileri olabilir.
  • Konum faktörü: Çok tercih edilen bir faktör olmasa da kullanıcının sisteme sadece belirli konumlardan girebilmesine izin verir.
  • Sahiplik faktörü: Sahiplik faktörü, kimlik doğrulamak için kullanılabilen bir aygıt / cihaz olabilir. Örneğin sisteme giriş yaparken kullanılan kişiye özel tanımlı bir kimlik kartı olabilir.
  • Zaman faktörü: Genellikle konum faktörü ile birlikte kullanılır. Örneğin, kullanıcı en son Türkiye’de akşamüzeri doğrulanmışsa, bir saat sonra Amerika’dan yapılan bir kimlik doğrulama girişimi, zaman ve yer kombinasyonuna bağlı olarak reddedilir.

Şimdi günümüz sistemlerinde bu kimlik doğrulama işleminin nasıl çalıştığına bir de sistem tarafından bakalım.

Kimlik Doğrulama Türleri:

Temel Kimlik Doğrulaması:

HTTP temel kimlik doğrulaması, bir sunucunun bir istemciden kimlik doğrulama bilgilerini isteyebileceği basit bir kimlik doğrulama şeklidir. Tarayıcı, kimlik doğrulama bilgilerini bir Yetkilendirme üstbilgisinde sunucuya gönderir. Kimlik doğrulama bilgileri base64 ile maskelenir.

Bir tarayıcı, korunan dizine anonim bir istekte bulunursa, sunucu 401 durum koduyla bir HTTP yanıtı, kimlik doğrulama hatasını belirten bir neden ifadesi ve bir WWW-Authenticate başlığı gönderir. Örneğin:

HTTP/1.1 401 Access Denied
WWW-Authenticate: Basic realm=”PrismaServer”

Kimlik doğrulaması için gereken bilgiler girildiğinde, istek Yetkilendirme (Authorization) başlığıyla yeniden gönderilir:

Authorization: Basic userid:password

Gönderilen bilgilerin veri tabanındaki bir kayıt ile eşleşmesi durumunda kimlik doğrulanmış olur. Bu örnek en temel seviye kimlik doğrulama şeklidir.

Form Kimlik Doğrulaması:

Form kimlik doğrulaması, doğrulama işlemi için tarayıcıda bulunan çerezleri kullanır. Eğer herhangi bir çerez bilgisi yoksa kullanıcı sisteme giriş yapmak zorundadır. Giriş yapmış bir kullanıcının tarayıcısındaki çerezlerin geçerlilik süresi dolduğu zaman sistem kullanıcıyı tekrar giriş sayfasına yönlendirir. Birkaç gün önce giriş yapmış olduğumuz bir siteye bugün tekrar girdiğimizde hesabımızın halen açık olduğunu görebiliriz. Bunun sebebi yaptığımız girişin halen tarayıcımızın çerezlerinde bulunuyor olmasından kaynaklanır. Tarayıcımızdaki çerezleri temizlersek o ana kadar giriş yapmış olduğumuz tüm hesaplardan çıkış yapmış oluruz (Farklı siteler dâhil).

Form kimlik doğrulamasının bir standardı yoktur. Bu kimlik doğrulama yönteme genelde programcıların kendi geliştirdikleri bir doğrulama tarzıdır diyebiliriz. Yani farklı sistemlerde farkı tarzlarda form kimlik doğrulaması görebiliriz. Şimdi temel bir form kimlik doğrulaması için hangi ayarlar yapılabilir basit bir örnek ile bakalım:
Form kimlik doğrulaması için yapılan ayarlamalar şu şekildedir:

  • Web.config dosyamız içerisindeki ayarları form kimlik doğrulaması için şu şekilde düzenleyebiliriz:
KİMLİK DOĞRULAMA (AUTHENTİCATİON) NEDİR
  • Uygulamamıza anonim erişimi kaldırmak için web.config dosyamıza şu ayarları eklememiz gerekiyor:
KİMLİK DOĞRULAMA (AUTHENTİCATİON) NEDİR

Şimdi konuyu daha iyi anlayabilmek için iki doğrulama türü arasındaki farklara bakalım:

Tarayıcımız bir web sunucusuna bağlandığında, HTTP üstbilgisinde “WWW-Authenticate: Basic” iletisini bağlandığı sunucuya gönderir. Giriş kimlik bilgilerinizi base64 kodlaması olarak adlandırılan hafif bir gizleme tekniği kullanarak sunucuya gönderir. Bilgileriniz her ne kadar base64 ile maskelense de base64 bir şifreleme aracı değildir.

Temel kimlik doğrulamasının birtakım dezavantajları vardır. Bunlardan biri, kullanıcı adı ve şifrenin her istekte açık olarak gönderilmesidir.

Ayrıca, kimlik bilgileri her istekle birlikte tekrar gönderildiği için bu durum güvenlik açığına sebep olmaktadır. Temel kimlik doğrulama ile herhangi bir istekten, kullanıcının bilgileri diğer doğrulama yöntemlerine oranla daha kolay ele geçirilebilir.

Form tabanlı kimlik doğrulama, bir kurala bağlı değildir. Temel olarak, geliştiricilerin yetkilerin olumsuz etkilerini hafifletmek için oluşturdukları programatik bir kimlik doğrulama yöntemidir. Form tabanlı kimlik doğrulamanın çoğunda aşağıdaki durumlar geçerlidir:

  • Resmi HTTP kimlik doğrulama teknikleri kullanılmaz.
  • Kullanıcı adı ve şifre bilgilerini sunucuya iletmek için standart HTML form alanları kullanılır.
  • Kullanıcı oturumunu kapatırsa veya sunucu kullanıcıyı kapatırsa (örneğin belirli bir boşta kalma süresinden sonra), sunucu oturum anahtarını (çerezleri) geçersiz kılar, böylece kullanıcı sistemi kullanmaya devam etmek istediği zaman kimliğini tekrar doğrulamak zorunda kalır.

Temel kimlik doğrulamada da olduğu gibi, form tabanlı kimlik doğrulaması HTTP üzerinden bağlandığınızda oturum açma bilgilerinizi “güvenilir bir şekilde” korumaz. Bundan dolayı, temel kimlik doğrulamadan “daha güvenlidir” diyemeyiz. Ancak, kısa bir süre sonra uygulamayı tekrar açan kullanıcı için çerezleri kullanarak oturumunu devam ettirmek veya belirli bir süre işlem yapılmadığında kullanıcının oturumunu kapatmak için form kimlik doğrulamasını kullanmak daha avantajlıdır.

Peki sistemimize kayıt olmak isteyen bir kullanıcının bilgilerini üçüncü taraf bir hizmetten onaylamak istediğimiz zaman ne yapmamız gerekiyor? Örneğin günümüzde sıkça kullandığımız “Facebook ile kayıt ol” özelliğinde kimlik doğrulamasının nasıl çalıştığını hiç merak ettiniz mi? Bu gibi üçüncü taraf bir uygulama üzerinden kayıt olmak istediğimiz zaman genelde OAuth 2 tekniği kullanılır. Şimdi OAuth 2 tekniğini inceleyelim:

OAuth 2 Nedir?

OAuth 2; web uygulamalarının, Facebook, GitHub ve DigitalOcean gibi hizmetlerdeki kullanıcı hesaplarına sınırlı erişim elde etmesini sağlayan bir yetkilendirme şeklidir. Kullanıcı kimlik doğrulamasını kullanıcı hesabını barındıran hizmete devrederek ve üçüncü taraf uygulamaların kullanıcı hesabına erişmesine izin vererek çalışır. OAuth 2, web ve masaüstü uygulamaları ve mobil cihazlar için yetkilendirme akışları sağlar diyebiliriz. OAuth Rolleri ile başlayalım:

OAuth Rolleri

OAuth 2 yöntemini dört rol üzerinden inceleyebiliriz:

Kaynak Sahibi: Kullanıcı

Kaynak sahibi, bir uygulamaya hesabına erişme izni veren kullanıcıdır. Uygulamanın kullanıcının hesabına erişimi, verilen yetkilendirmenin “kapsamı” ile sınırlıdır (Örneğim Okuma veya yazma erişimi).

Kaynak / Yetkilendirme Sunucusu: API

Kaynak sunucu kullanıcı hesaplarını barındırır ve yetkilendirme sunucusu kullanıcının kimliğini doğruladıktan sonra uygulamaya erişim sürecini planlar.

Bir uygulama geliştiricisinin açısından bakacak olursak, bir hizmetin API’si hem kaynak hem de yetkilendirme sunucu rollerini yerine getirir. Hizmet veya API rolü olarak, bu rollerin her ikisine de başvururuz.

Müşteri: Uygulama

Müşteri, kullanıcının hesabına erişmek isteyen uygulamadır. Bunu yapmadan önce, kullanıcı tarafından yetkilendirilmeli ve yetkilendirme API tarafından doğrulanmalıdır. Bu sayede kullanıcının hesabına erişme yetkisi olur.

Artık, OAuth 2 rollerini incelediğimize göre, birbirleriyle nasıl etkileştiklerini gösteren bir şemaya bakalım:

KİMLİK DOĞRULAMA (AUTHENTİCATİON) NEDİR

Şimdi diyagramdaki adımları daha ayrıntılı bir şekilde inceleyelim:

  • Uygulama, kullanıcılardan hizmet kaynaklarına erişmek için yetkilendirme ister.
  • Kullanıcı talebi onayladıysa, başvuru bir yetkilendirme isteği alınır.
  • Uygulama, kendi servisinin kimlik doğrulamasını ve yetkilendirme yetkisini sunarak yetkilendirme sunucusundan (API) erişim bilgisini (Token) ister.
  • Uygulama kimliği doğrulanırsa ve yetkilendirme yetkisi onaylanırsa, yetkilendirme sunucusu (API) uygulamaya bir erişim izni verir. Yetkilendirme bu adımda tamamlanır.
  • Uygulama gerekli kaynağı, kaynak sunucudan (API) ister ve kimlik doğrulama için erişim bilgisini sunar.
  • Erişim belirteci geçerliyse, kaynak sunucu (API) uygulamaya istenilen kaynağı gönderir.
API Kimlik Doğrulama Frameworkleri

Yazılım geliştiricilerinin kimlik doğrulama adımlarını kolayca kurgulayabilmesi ve geliştirebilmesi için birçok programlama dilinde bu süreci kolaylaştıran frameworkler mevcuttur.

PHP için Kimlik Doğrulama

Opauth:

OmniAuth for Ruby tarafından geliştirilen Opauth, PHP uygulamalarının kimlik doğrulama sağlayıcılarıyla ara yüz oluşturması için standart bir yöntem sunar. Opauth frameworkü, geliştiricilerin PHP uygulamalarında öngörülebilir bir şekilde çalışan stratejiler oluşturmasına olanak veren bir dizi API sağlar. Opauth diğer PHP Frameworkleri ile kolayca entegre edilebilir. Örneğin:

  • Laravel
  • CakePhp
  • Vanilla
  • Silex
KİMLİK DOĞRULAMA (AUTHENTİCATİON) NEDİR
.NET için Kimlik Doğrulama

Identity Framework

“ASP.Net Identity” varsayılan olarak “SQL Server” üzerinde çalışacak şekilde planlanmış ve geliştirilmiştir. Diğer tekniklere oranla öne çıkan faydaları şe şekildedir:

  • Net MVC, Web Forms, Web Pages, Web Api gibi ASP.Net Framework üzerinde çalışan mobil, Windows Store ve Hybrid uygulamalarda kullanılabilmektedir.
  • Veri tabanında yer alan tabloların genişletilmesi ve özelleştirilmesi için imkân sağlamaktadır.
  • Genişletilebilir ve özelleştirilebilir bir yapıda tasarlanmıştır.
  • Facebook, Twitter, Google servisleri üzerinden üyelik işlemlerini gerçekleştirebilirsiniz.
  • Azure ile oldukça kolay bir şekilde entegre edilebilir.
  • Güncellenebilir ve yönetilebilir bir yapıya sahiptir.
KİMLİK DOĞRULAMA (AUTHENTİCATİON) NEDİR

Blog postu ile ilgili bir sorunuz varsa bizimle iletişime geçebilirsiniz.

Türkalp KAYRANCIOĞLU

Size nasıl yardımcı olalım?

İhtiyacınız olan her an Prisma danışmanları yanı başınızda. Bizimle 7/24 iletişime geçebilirsiniz.


    Sızma testi hizmetlerimizi incelediniz mi?