Çerez tabanlı kimlik doğrulaması nasıl çalışır?


210

Birisi bana çerez tabanlı kimlik doğrulamanın nasıl çalıştığının adım adım açıklamasını verebilir mi? Kimlik doğrulama veya çerez içeren hiçbir şey yapmadım. Tarayıcının ne yapması gerekir? Sunucunun ne yapması gerekir? Hangi sırayla? İşleri nasıl güvende tutarız?

Farklı kimlik doğrulama türleri ve çerezler hakkında okuyordum, ancak ikisini birlikte nasıl kullanacağımla ilgili temel bir açıklama istiyorum - Sadece birlikte sık kullandıklarını ancak nasıl bir açıklama bulamadıklarını okudum.


Yanıtlar:


162

Çerez temel olarak sözlükteki bir öğedir. Her öğenin bir anahtarı ve değeri vardır. Kimlik doğrulama için, anahtar 'kullanıcı adı' gibi bir değer olabilir ve değer kullanıcı adı olacaktır. Bir web sitesine her istekte bulunduğunuzda, tarayıcınız istekte çerezleri içerecek ve ana makine sunucusu çerezleri kontrol edecektir. Böylece kimlik doğrulama bu şekilde otomatik olarak yapılabilir.

Bir çerez ayarlamak için, sunucuyu isteklerden sonra geri gönderdiği yanıta eklemeniz yeterlidir. Tarayıcı daha sonra yanıtı aldıktan sonra çerezi ekleyecektir.

Tanımlama süresi tarafı veya şifreleme gibi çerez sunucusu tarafı için yapılandırabileceğiniz farklı seçenekler vardır. Şifreli bir çerez genellikle imzalı çerez olarak adlandırılır. Temel olarak sunucu sözlük öğesindeki anahtarı ve değeri şifreler, böylece bilgileri yalnızca sunucu kullanabilir. Böylece çerez güvenli olur.

Bir tarayıcı, sunucu tarafından ayarlanan çerezleri kaydedecektir. Tarayıcının bu sunucuya yaptığı her isteğin HTTP başlığında, çerezleri ekler. Yalnızca onları ayarlayan alan adları için çerezler ekler. Example.com bir çerez ayarlayabilir ve ayrıca tarayıcıların çerezi sub.example.com gibi alt alan adlarına geri göndermeleri için HTTP başlığına seçenekler ekleyebilir. Bir tarayıcının farklı bir alana çerez göndermesi kabul edilemez.


Anladığım şey, tarayıcının çerezi aynı alana geri gönderebilmesidir. Bununla ilgili olarak, iki alan arasında ayrım yapılırken tarayıcı alt alan adını dikkate alır mı?
Aakash

1
HTTP üstbilgisinde bir tarayıcının alt etki alanlarını nasıl ele alacağına ilişkin seçenekleri ayarlayabilirsiniz.
Conor Patrick

288

Bunun yıllar geçtiğinin farkındayım, ama Conor'un cevabına genişleyebileceğimi ve tartışmaya biraz daha ekleyebileceğimi düşündüm.

Birisi bana çerez tabanlı kimlik doğrulamanın nasıl çalıştığının adım adım açıklamasını verebilir mi? Kimlik doğrulama veya çerez içeren hiçbir şey yapmadım. Tarayıcının ne yapması gerekir? Sunucunun ne yapması gerekir? Hangi sırayla? İşleri nasıl güvende tutarız?

1. Adım: İstemci> Kaydolma

Her şeyden önce, kullanıcının kaydolması gerekir. İstemci, sunucuya kullanıcı adını ve şifresini içeren bir HTTP isteği gönderir.

2. Adım: Sunucu> Kaydı işleme

Sunucu bu isteği alır ve kullanıcı adını ve şifreyi veritabanınıza kaydetmeden önce şifreyi hash eder. Bu şekilde, birisi veritabanınıza erişirse, kullanıcılarınızın gerçek şifrelerini görmez.

3. Adım: İstemci> Kullanıcı girişi

Şimdi kullanıcı oturum açıyor. Kullanıcı adını / şifresini veriyor ve yine sunucuya bir HTTP isteği olarak gönderiliyor.

Adım 4: Sunucu> Giriş onaylama

Sunucu, veritabanındaki kullanıcı adını arar, verilen oturum açma parolasını hash eder ve veritabanındaki daha önceki karma parolayla karşılaştırır. Kontrol etmezse, 401 durum kodu göndererek ve isteği sonlandırarak erişimini reddedebiliriz .

5. Adım: Sunucu> Erişim belirteci oluşturma

Her şey kontrol edilirse, kullanıcının oturumunu benzersiz bir şekilde tanımlayan bir erişim belirteci oluşturacağız. Hala sunucudayken, erişim belirteciyle iki şey yapıyoruz:

  1. Bu kullanıcıyla ilişkili veritabanında saklayın
  2. İstemciye döndürülecek bir yanıt çerezine ekleyin. Kullanıcının oturumunu sınırlamak için bir son kullanma tarihi / saati ayarladığınızdan emin olun

Bundan sonra, çerezler istemci ile sunucu arasında yapılan her talebe (ve yanıta) eklenecektir.

6. Adım: İstemci> Sayfa istekleri yapma

İstemci tarafında tekrar oturum açtık. İstemci, yetkilendirme gerektiren bir sayfa için her istekte bulunduğunda (yani oturum açmaları gerekir), sunucu çerezden erişim belirtecini alır ve bunu karşı kontrol eder o kullanıcıyla ilişkili veritabanında. Kontrol edilirse, erişim verilir.

Bu senin başlamanı sağlamalı. Çıkışta çerezleri temizlediğinizden emin olun!


10
Açıklama için teşekkürler. Acaba erişim belirteci nasıl güvenlik sağlıyor? Bir saldırgan, çerezi çalarsa, kimliği doğrulanmış bir giriş yapmış kullanıcı olarak poz verebilir mi? Yoksa SSL ile korunuyor mu?
Richeek

6
@Richeek SSL, istekler / yanıtlar sırasında müdahaleyi güvence altına alır, ancak bir saldırgan bitiş noktalarındaki çerezlere erişebilir (örneğin tarayıcınız). Teorik olarak, çerez süresi sona erene kadar giriş yapmış bir kullanıcı olarak görünebilirler. “Teorik olarak” diyorum çünkü yukarıdaki uygulama bunu ele almıyor. Yukarıdaki uygulamada, saldırganın veritabanınızdaki erişim belirteci güncellenene kadar erişimi olacaktır (yani bir sonraki oturum açma).
pllx

14
Erişim belirtecini süreniz dolduğunda, belki de veritabanınızdaki bir “son kullanma tarihi” ile geçersiz kılabilirsiniz. Veya erişim belirteçleri gibi olan, ancak diğer özelliklerin yanı sıra belirteç sona erme işlemini gerçekleştirebilen JSON Web Belirteçleri'ni (JWT) kullanmayı da düşünebilirsiniz . Burada JWT hakkında daha fazla bilgi. Bir saldırgan, erişim belirteciniz / JWT'niz varsa hesabınıza kısa bir süre erişmeye devam edecektir, bu nedenle uç noktalarınızı da güvence altına almalısınız.
pllx

3
Teşekkür etmek için uzun sürdüm! Açıklamalarınız için teşekkürler
Richeek

4
@ManuChadha, jeton / oturum anahtarı ile birlikte, kullanıcının geçerli bir çerezle birlikte gelirse, ancak yanlış ip, tarayıcı vb. isteği reddedin ve tekrar kimlik doğrulaması yapmak için kullanıcıyı giriş sayfasına yönlendirin.
19:11, FalcoGer

18

Çerez Tabanlı Kimlik Doğrulama

Çerez tabanlı Kimlik Doğrulaması bu 4 adımda normal şekilde çalışır.

  1. Kullanıcı, giriş formunda bir kullanıcı adı ve şifre sağlar ve Oturum Aç'ı tıklar.
  2. İstek yapıldıktan sonra, sunucu veritabanında sorgulayarak kullanıcıyı arka uçta doğrular. İstek geçerliyse, veritabanından getirilen kullanıcı bilgilerini kullanarak bir oturum oluşturur ve bunları saklar, her oturum için oturum kimliği adı verilen benzersiz bir kimlik oluşturulur, varsayılan oturum kimliği tarafından istemciye Tarayıcı aracılığıyla verilir.
  3. Tarayıcı, sonraki her istekte bu oturum kimliğini gönderir, oturum kimliği veritabanına doğrulanır, bu oturum kimliği web sitesine dayanarak, hangi istemciye ait oturumu tanımlar ve daha sonra isteğe erişim izni verir.

  4. Bir kullanıcı uygulama oturumunu kapattığında, oturum hem istemci hem de sunucu tarafında yok edilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.