( bu konu kendi başına bir soru olduğundan ve NodeJS'ye vb.
Kimlik doğrulamalı bir REST API sunucusu uyguluyorum ve bir kullanıcının / login uç noktasında kullanıcı adı / parola ile oturum açabilmesi için JWT belirteci işlemeyi başarıyla uyguladım, bunun üzerine bir sunucu sırrından bir JWT belirteci oluşturulur ve istemcisi. Daha sonra belirteç, kimliği doğrulanmış her API isteğinde istemciden sunucuya iletilir ve bunun üzerine belirteci doğrulamak için sunucu sırrı kullanılır.
Bununla birlikte, gerçekten güvenli bir sistem oluşturmak için token'ın tam olarak nasıl ve ne ölçüde doğrulanması gerektiğine dair en iyi uygulamaları anlamaya çalışıyorum. Jetonun "doğrulanmasına" tam olarak ne dahil edilmelidir? İmzanın sunucu sırrı kullanılarak doğrulanması yeterli mi, yoksa belirteç ve / veya belirteç yükünü sunucuda depolanan bazı verilerle karşılaştırmalı mıyım?
Belirteç tabanlı bir kimlik doğrulama sistemi, bir simge elde etmenin bir kullanıcının parolasını elde etmekten eşit veya daha zor olması koşuluyla, her istekte kullanıcı adı / parolayı geçirmek kadar güvenli olacaktır. Ancak, gördüğüm örneklerde, bir belirteç oluşturmak için gereken tek bilgi kullanıcı adı ve sunucu tarafı sırrıdır. Bu, kötü niyetli bir kullanıcının bir dakika boyunca sunucu sırrına ilişkin bilgi edindiğini varsayarsak, artık herhangi bir kullanıcı adına belirteçler üretebileceği anlamına gelmiyor mu? ama aslında tüm kullanıcı hesaplarına?
Bu beni sorulara getiriyor:
1) JWT belirteç doğrulaması, yalnızca sunucu sırrının bütünlüğüne bağlı olarak veya ayrı bir doğrulama mekanizmasıyla birlikte belirtecin kendisinin imzasını doğrulamakla mı sınırlandırılmalıdır?
Bazı durumlarda, / login uç noktası üzerinden başarılı bir şekilde oturum açıldığında bir oturumun kurulduğu belirteçlerin ve sunucu oturumlarının birleşik kullanımını gördüm. API istekleri belirteci doğrular ve ayrıca belirteçte bulunan kodu çözülmüş verileri oturumda depolanan bazı verilerle karşılaştırır. Ancak, oturum kullanmak çerez kullanmak anlamına gelir ve bir anlamda belirteç tabanlı bir yaklaşım kullanma amacını ortadan kaldırır. Ayrıca belirli müşteriler için sorunlara neden olabilir.
Bir saldırganın "geçerli" belirteçler üretebilmesi için sunucu sırrının ele geçirilmesi durumunda bile, yalnızca / login uç noktası aracılığıyla oluşturulan tam belirteçlerin üretilebilmesini sağlamak için, sunucunun şu anda kullanılmakta olan tüm simgeleri bir memcache veya benzerinde tuttuğu düşünülebilir. kabul edilecektir. Bu makul mü yoksa sadece gereksiz / aşırı mı?
2) JWT imza doğrulaması belirteçleri doğrulamanın tek yolu ise, yani sunucu sırrının bütünlüğü kırılma noktasıysa, sunucu sırları nasıl yönetilmelidir? Bir ortam değişkeninden okundu ve dağıtılan yığın başına bir kez oluşturuldu mu (rastgele mi?)? Periyodik olarak yeniden yenilenen veya döndürülen (ve eğer öyleyse, rotasyondan önce oluşturulan ancak rotasyondan sonra doğrulanması gereken mevcut geçerli jetonların nasıl işleneceği, belki de sunucu herhangi bir zamanda geçerli ve önceki sırrı tutarsa yeterlidir) ? Başka bir şey?
Belki de sunucu sırrının tehlikeye girme riski söz konusu olduğunda aşırı derecede paranoyak oluyorum, ki bu elbette tüm kriptografik durumlarda ele alınması gereken daha genel bir sorundur ...
RSAPrivateKey privateKey
mi?