çerez vs oturum vs jwt


12

Web uygulamalarında kimlik doğrulama / yetkilendirme konusunu okuyorum. Mevcut bilgimi kimse doğrulayabilir / düzeltebilir mi?

  • Çerezler: ilk sürümlerinde, benzersiz bir istemciye sahip bir metin dosyası, istemci hakkında gereken diğer tüm bilgileri (ör. Roller)

  • Oturum: bir dosyaya (çerez de denir) yalnızca benzersiz istemci kimliği gönderilir, diğer her şey sunucuda depolanır

  • JWT: her şey jetonda saklanır (çerez olarak da adlandırılan bir metin dosyasında da saklanabilir)

Herhangi bir geri bildirim için teşekkürler!

Yanıtlar:


12

Çerezler: ilk sürümlerinde, benzersiz bir istemciye sahip bir metin dosyası, istemci hakkında gereken diğer tüm bilgileri (ör. Roller)

Çerezler, key-valuebaşlangıçta istemci etkinliğiyle ilgili verileri tutmak için adreslenen gruplardır . Bu saklama , oturum veya başvuru durumu olarak bildiğimiz şeydir . Temel olarak, web uygulamalarının durumunu tutmak için yapılmıştır; daha spesifik olarak, istemci tarafındaki durum. (1)

Çerezler genellikle sunucu tarafından yanıt üstbilgileri ( Set-Cookie key=value) ile ayarlanır . Ancak, istemci tarafından da ayarlanabilir. Örneğin, DOM ( document.cookie) ile.

Çerezler hakkında bilinmesi gereken önemli bir şey, kullanıcıları tanımlamamalarıdır. Daha çok terna verilerini (istemci - sunucu / yol) ilişkilendirir . (3)

Çerezleri genellikle dosyalarla ilişkilendiririz, çünkü web tarayıcılarının ilk günlerinde, çerezleri bir şekilde devam ettirmek zorunda kalıyorlardı, dosyalar en uygun destek oldular. Bugünün tarayıcıları çerezleri (diğer şeylerin yanı sıra) yerel depolarda (gömülü DB'ler) saklar.

Oturum: yalnızca benzersiz istemci kimliği bir dosyaya (çerez de denir) gönderilir, diğer her şey sunucuda depolanır.

Oturumla, sanırım sunucu oturumları demek istiyorsun . Yorum yaptığım gibi, oturumlar istemci tarafında da uygulanabilir. İstemci tarafı oturumları arasındaki fark, verilerin sunucu tarafında bir yerde saklanmasıdır. (2) Bu tür senaryolarda elde ettiğimiz şey bir oturum kimliği; ve kurabiye biçiminde alıyoruz. Oturum kimliği olmadan, sunucu gelen istekleri istemcinin önceki etkinliğiyle ilişkilendiremez. (3) Örneğin, kimliği doğrulanmış kullanıcı, alışveriş sepeti vb.

Her durumda, oturum kimliği mutlaka bir kullanıcıyı tanımlamaz. Belirli bir uygulama durumunu bir web istemcisiyle ilişkilendirir. Oturumlar kullanıcı verileri içerebilir veya içermeyebilir.

Dağıtılmış uygulamalarda, oturum bariz nedenlerle serileştirilebilir olmalıdır. Bellekte saklanıyorlarsa, bellek içi depolama (bileşen) serileştirilebilir olmalıdır. Yaygın bir çözüm, oturumları dosyalarda saklamaktır. Ya da Redis gibi NoSQL DB'de.

Güvenlik konusunda. Sunucu tarafı oturumları istemci tarafından daha güvenlidir. İstemciler tehditlere karşı daha savunmasızdır, çünkü kullanıcılar genellikle maruz kaldıkları tehditlerin farkında değildir. En azından normal kullanıcı değil.

Öte yandan, bir sunucu tarafı altyapıya saldırmak üç değerlilikli değildir.

JWT: her şey jetonda saklanır (çerez olarak da adlandırılan bir metin dosyasında da saklanabilir)

Pek sayılmaz. JWT, temel olarak jetonun yetkilendirmesi ve düzenleyicisi ile ilgili verileri depolar.

Kullanıcı kimliğini (alt) içermek için kullanmasına rağmen, kimliği doğrulanmış kullanıcıları tanımlamayan JWT'ler buluyoruz. Örneğin, konuk oturumları için jetonlar. JWT'lerin ana içeriği taleplerdir ; yetkilendirme işlemi tarafından kontrol edilecek öğeler.

JWT'lerin küresel depolar olmadığını akılda tutmak önemlidir . Oturum veya uygulama durumu hala bir yerlerde saklanan ve bağımsız olarak yönetilen gerekmektedir.

JWT'lerle ilgili olarak, bunlar yerel depolarda da saklanabilmelerine rağmen, genellikle çerez olarak saklanır. Dahası, OWASP topluluğu sessionStorage'ı web tarayıcıları için daha güvenli olarak görmektedir . Ancak, tarayıcının sürümüne bağlıdır .


1: Dünya Çapında Ağ vatansızdır. Durumsuz sunucu tarafı uygulamaları oluşturmak istiyorsak, oturumlar istemci tarafında bir yerde saklanmalıdır.

2: Sunucu tarafı uygulamasını durum bilgisi olan bir uygulamaya dönüştürme .

3: İstemci uygulama olarak, kullanıcı olarak değil.


Varsayılan Ruby on Rails yapılandırması gibi bazılarının "oturum" nesnesinin tamamını, user_idoturum açmış bir kullanıcı için yalnızca bir şey içerebilecek bir çerezde (bu günlerde normalde şifrelenmiş) sakladığını unutmayın .
Ateş Lancer

7

Çerezler: ilk sürümlerinde, benzersiz bir istemciye sahip bir metin dosyası, istemci hakkında gereken diğer tüm bilgileri (ör. Roller)

Çerez tanımınız gerçekten ne yaptıklarını tanımlamıyor. Çerez, Set-Cookiesunucu tarafından HTTP yanıt başlığı ( ) aracılığıyla ayarlanan ve bunları destekleyen istemciler tarafından depolanan bir anahtar / değer çiftidir . Çerezler Cookie, çerez süresi dolmamışken, şema, ana bilgisayar, yol, https ile eşleşen istekler için sonraki her istekle ( başlıkta) geri gönderilir . İstediğiniz her şeyi bir çerezde saklayabilirsiniz ve HTTP'nin durum bilgisi olmayan protokolünde durumu desteklemenizi sağlar.

Örnek bir çerez alışverişi şuna benzer:

resim açıklamasını buraya girin

Oturum: bir dosyaya (çerez de denir) yalnızca benzersiz istemci kimliği gönderilir, diğer her şey sunucuda depolanır

Bu hemen hemen doğru. Oturum, bir kullanıcının geçerli oturumu hakkında sunucu tarafında depolanan verilerdir. Bunun HTTP gibi durum bilgisi olmayan bir protokolde çalışması için, kullanıcının oturum kimliğini her istekle birlikte göndermesi gerekir, böylece sunucu kullanıcı için doğru oturumu alabilir. Oturum kimliği genellikle bir çerezde saklanır (yukarıya bakın). Bu, diğer çerezlerden farklı bir çerez değildir, veriler kullanıcı oturumu için yalnızca sunucunun kimliğidir.

JWT: her şey jetonda saklanır (çerez olarak da adlandırılan bir metin dosyasında da saklanabilir)

Bu hemen hemen doğru. Her şey jetonda saklanır. Jeton bir çerezde saklanabilir (yukarıya bakın). Bu, sunucu oturumlarına bir alternatiftir ve belirteç sunucu tarafından imzalandığı ve doğrulandığı için çalışır, bu nedenle değiştirilemez veya dövme yapılamaz ve istemci tarafında saklamak güvenlidir.


JWT'ler benim deneyimimde normalde çerezlerde saklanmaz. Bunlar olabilir, ancak daha çok onları sunucuya giderken kendi başlıklarında (veya genellikle Yetkilendirme başlığında) gördüm ve bellekte veya istemcide Yerel veya Oturum depolama alanında depoladım.
Paul

1
@ Yerel depolama ile ilgili paul. İstemciye bağlıdır. Tüm istemciler ve en çok kullanılan istemcilerin tüm sürümleri web depolamayı desteklemez. Buraya bir bak . Eğer öyleyse, jetonları mevsimlik yapmak tercih edilir . Ancak, müşterilerimiz yerel depolamayı desteklemiyorsa; Httponly çerezleri + SSL + istemci fingerPrints bize oldukça güvenli bir uygulama sağlar.
Laiv

@Laiv Seninle aynı fikirde değilim; Samuel'in "jeton bir çerezde saklandığını" söylediğini ve bunun her zaman böyle olmadığını gözlemlemeye çalışıyordum.
Paul

@ Paul okumak için değiştirdim "... bir çerez saklanabilir"
Samuel
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.