JSON Web Token - taşıma kapasitesi neden halka açık?


30

Bir JWT'nin taleplerini / yükünü, base64 kodunu çözdükten sonra herkes tarafından görülebilir kılmanın nedenini anlayamıyorum.

Niye ya?

Sır ile şifrelenmiş olması çok daha yararlı olacak gibi görünüyor.

Birisi bu verileri halka açık tutmanın nedenini veya hangi durumda olduğunu açıklayabilir mi?


JWT yazdığınızda, muhtemelen JWS demek istiyorsunuz. Çünkü JWE (ayrıca JWT'nin "alt sınıfı") aslında içeriği şifreler.
Alexey

Yanıtlar:


28

Yükünü, başka hiçbir şeyi şifrelememeyi seçtiğiniz nedenlerle şifrelememeyi seçtiniz: maliyet (ancak küçük olmasına rağmen) faydayı aşıyor ve çok fazla verinin bu şekilde güvence altına alınması gerekmiyor.

En çok korunmaya ihtiyaç duyduğunuz şey, yanlış kayıtların güncellenmesi ya da birinin hesabının kontrol edilmemesi gereken parayı alması için veriyi kurcalayan insanlar. JSON Web Token'in imzası, başlığın / payload / imza kombinasyonunun herhangi bir bölümünü değiştirmek, paketi geçersiz kıldığından, bunu gerçekleştirir.

Paketleri yine de SSL kullanarak Aktarım Katmanında koruyabileceğinizi unutmayın.


Ah, görüyorum, bu yüzden aslında JWT yeni bir CSRF belirtecidir. Açıklaman için teşekkürler, karışıklığı çözdü.
ineedhelp

6
Hiçbir JWT yeni bir CSRF belirteci değildir. Bunlar 2 farklı şey.
Ash,

@ash, JWT'de bir işlemin ayrıntıları saklanır ve sunucuda doğrulanırsa, JWT esas olarak bu senaryoda CSRF önleme rolünü oynamıyor mu? Bir vanilya JWT'nin asıl amacının kimlik doğrulama olduğunu, bu cevabın çok açık olduğunu biliyorum. Sanırım daha fazla veri eklemeyi ve aynı anda iki şeyi başarmayı hayal ediyordum.
ineedhelp

@RobertHarvey, yanlış JWT kullanıyorsunuz. JST, JWS ve JWE için bir "şemsiye" terimidir. JWS kimlik doğrulaması yapmak, JWE şifrelemek. Yani "JSON Web Token'in amacı kimlik doğrulaması yapmaktır" aslında "JWS kimlik doğrulaması yapmak" olmalıdır.
Alexey

@Alexey: Cevap vermek için cevabımda küçük bir değişiklik yaptım.
Robert Harvey

4

RFC'de imza teriminin kullanılması, asimetrik kriptografideki dijital imza ile aynıdır. Asimetrik şifrelemede, gönderen bir mesajı özel anahtarıyla şifrelerse, mesajı olan herhangi biri gönderenin ortak anahtarıyla şifresini çözebilir. Bu nedenle, imza terimi ile amaç bir iletiyi gizli tutmak değil, iletinin bütünlüğünü / göndericisini doğrulamak değildir, bu değişmemiştir.

JWT'lerde, gönderen sistem mesajın hem yaratıcısı hem de tüketicisidir (aşağıdaki şemaya bakınız) ve amaç, kullanıcıya iletilen tokenin tahrif edilmediğinden (örneğin, yüksek ayrıcalıklar verildiğinden) emin olmaktır.

@Robert'in dediği gibi, JWT'ler hala TLS ile şifrelenebilir / şifrelenmelidir.

Aşağıda, aşağıdaki görüntünün kaynaklandığı JWT'ler ve imzaların iyi bir açıklaması bulunmaktadır. JSON Web Simgelerini Anlamak için 5 Kolay Adım (JWT)

asdfasdf


2

Robert Harvey’in cevabını eklemek için, veri yükünü şifrelemenin önemli bir dezavantajı vardır - servis alıcısının, belirtecin taşıyıcısının yetkili olup olmadığını anlamak için kimlik doğrulama sunucusuyla (şifreleme anahtarı) bir sır paylaşması gerektiği anlamına gelir. ya da değil. Buna karşılık, herhangi biri yalnızca kimlik doğrulama sunucusu tarafından yayınlanan genel anahtarı kullanarak bir JWT'yi doğrulayabilir.

Bu, openid connect teknik özelliklerinin önemli bir parçasıdır, çünkü istemci uygulamaların auth sunucusu tarafından verilen kimlik belirteçlerini doğrulamasını sağlar, ayrıca kaynak sunucuların dağıtımını kolaylaştırır (gizli şifrelemeye erişim ile konuşlandırılmaları gerekmediğinden) ) ve ayrıca verilen JWT ile ilgili sorunları teşhis etmeye çalışırken de yardımcı olur.


Asimetrik ve simetrik şifreleme mekanizmalarını karşılaştırmaya çalışıyorsunuz, jwt, RSA şifrelemenin bir uygulamasıdır.
TheAnimatrix
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.