Erişim izinleri ve roller JWT yüküne dahil edilmeli midir?


9

İstemcinin izinleri ve rolleri hakkında bilgi JWT'ye dahil edilmeli midir?

JWT jetonunda bu tür bir bilgiye sahip olmak, geçerli bir jeton her geldiğinde çok yararlı olacaktır, kullanıcı hakkındaki izin hakkındaki bilgileri çıkarmak daha kolay olacaktır ve veritabanını aynı şekilde çağırmaya gerek kalmayacaktır. Ancak bu tür bilgileri dahil etmek ve veritabanında aynı şeyi tekrar kontrol etmemek bir güvenlik sorunu olacak mı?

Veya,

Yukarıda belirtilenler gibi bilgiler JWT'nin bir parçası olmamalı ve bir kullanıcının erişim rollerini ve izinlerini kontrol etmek için sadece veritabanı kullanılmalıdır.

Yanıtlar:


7

Jetona hak talebinde bulunmanın amacı, kaynak ile kimlik doğrulama sağlayıcısı arasında bu iletişime sahip olmanıza gerek kalmamasıdır.

Kaynak, jetonun geçerli bir imzası olup olmadığını kontrol edebilir ve içeriğe güvenebilir.

Özel anahtarın auth sunucusuna özel olduğunu varsayarsanız iyi edersiniz. Bazı sağlayıcılar riski azaltmak için anahtarlarını değiştirirler.

Bunu düşünürseniz, kaynak hak taleplerini almak için auth sunucusuna geri arama yaptıysa. Daha sonra benzer sunucu ile doğru sunucu ile konuşmasını sağlar.


Güzel bir cevap için teşekkürler, "Bazı sağlayıcılar riski azaltmak için anahtarlarını değiştirir" ifadesinden ne demek istediğini daha fazla öğrenebilir miyim? ?
Anshul Sahni

1
Dolayısıyla, sabit bir imzalama anahtarına sahip olmak yerine, kimlik doğrulama sağlayıcısı bunu sık sık değiştirecek ve kaynak sunucularının genel yarısını indirmeleri için bir uç nokta sağlayacaktır. Kaynakların kimlik doğrulama sunucusuna sık sık çağrı yapması gerekiyor, ancak istek başına bir kez değil
Ewan

Anahtar imzası servis tarafından her değiştirildiğinde tüm jetonlar geçersizdir
Anshul Sahni

1
genellikle birden fazla olası anahtara sahip olurlar, böylece uçuş simgelerinde geçersiz kılınmaz. jeton kaynağa hangisini kullanacağını söylemek için bir 'anahtar kimliği' içerecektir
Ewan

Burada özlediğim tek şey, JWT'deki veriler geçersiz kılındığında nasıl devam edileceğidir. Rollerin sunucu tarafında değiştiğini, ancak istemcinin tüm rolleri içeren jetonu elinde tuttuğunu varsayalım. Sunucu tarafındaki belirteçleri iptal edebilmeniz gerekir, böylece eski bilgileri tutan belirteçler artık geçerli değildir ve başka istekler için kullanılabilir değildir. Bu, bir veya başka bir nedenden dolayı Ewans'ın bir şekilde önerdiği şeyle (sunucunun jetonu iptal etmesine izin verir) uyumludur.
Laiv

1

Deneyimlerime göre, tüm sistemleriniz merkezi bir rol ve izin veritabanı kullanıyorsa, bunları JWT'ye ekleyebilirsiniz.

Ancak, kimlik doğrulama sunucusunun kendisi, jetonu alacak ve ona güvenecek olan hedef sistem hakkında hiçbir fikri olmadığında, bu yaklaşım TOA senaryolarında iyi çalışmayabilir.

Kullanıcının rolleri ve izinleri tamamen JWT belirtecinin alıcısı üzerindedir. TOA yetkilendirmesini JWT ile önceden izin alt sistemi bulunan bazı eski sistemlere entegre ettiğinizde özellikle doğrudur ve bu nedenle JWT'de mevcut olması için yalnızca bir hak talebinde bulunmaları gerekir - kullanıcı kimliği iddiası.


Buna katılıyorum. Idp, bu kullanıcı jwt'nin konuşacağı diğer hizmetlerin farkında olmadığından, kullanıcı izinleri özel olarak TOA'da jwt'nin bir parçası olmamalıdır .. bunun yerine kimlik, kullanıcı için kimlik doğrulandıktan sonra kaynak yetkilendirme bölümünü uygulamalıdır
Manish Rawat

Ayrıca, JWT'lerde izin taleplerinin basit bir yekpare API'nin ötesinde iyi bir fikir olmadığını da kabul ediyorum. Bu konuda bir blog yazısı yazdım: sdoxsee.github.io/blog/2020/01/06/…
sdoxsee
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.