• Buradasın

    JWT (JSON Web Token) Kapsamlı Eğitim Videosu

    youtube.com/watch?v=ju-53ZyjfEA

    Yapay zekadan makale özeti

    • Bu video, bir eğitmen tarafından sunulan teknik bir eğitim içeriğidir. Eğitmen, JWT (JSON Web Token) konusunu detaylı şekilde anlatmakta ve Bob ve Alice gibi örnek karakterler kullanarak konuları açıklamaktadır.
    • Video, JWT'nin ne olduğu, neden icat edildiği, yapısı (header, payload ve signature), kullanım alanları ve güvenlik önlemleri hakkında kapsamlı bilgiler sunmaktadır. İçerik, JWT token'larının nasıl oluşturulacağı, doğrulanacağı, expire kontrolü ve güvenlik zaafiyetleri (hash kırma, non-algoritma kullanımı, local storage'da tutulması) gibi konuları adım adım ele almaktadır.
    • Eğitim, monolit ve micro service mimarileri arasındaki farkları açıklayarak başlamakta, ardından AGEMAC kripto fonksiyonunun tanıtımı, Python'da JWT token oluşturma ve doğrulama kodları gösterilmektedir. Video, JWT token'larının dandikliği ve invalidate edilmesinin zorlukları gibi güvenlik sorunlarını ele alarak sonlanmakta ve daha ileri konuların (OpenID, authorization flow'lar, public-private key) sonraki videolarda ele alınacağı belirtilmektedir.
    JWT Nedir ve Neden İcat Edildi
    • Video, JWT (JSON Web Tokens) konusunu ele alıyor ve güvenlikçilerin genellikle üstünkörü geçtiği bu konuyu detaylı bir şekilde anlatmayı amaçlıyor.
    • JWT, web uygulamalarında Authorization header'ı olarak görülen ve Base64 ile kodlanmış veriler içeren bir güvenlik mekanizmasıdır.
    • Eski web güvenliği konseptinde cookie kullanılırken, JWT daha yeni bir teknoloji olup özellikle yeni başlayan güvenlik testçileri tarafından önemsememesi eğilimindedir.
    02:13Monolit ve Microservice Mimarisinin Karşılaştırılması
    • Monolit mimarisi, tüm uygulama fonksiyonlarının tek bir sunucuda veya tek bir veritabanında çalıştığı klasik bir web mimarisi türüdür.
    • Monolit mimarisinde kullanıcı oturumları tek bir veritabanında tutulur ve tüm uygulama fonksiyonları bu veritabanına erişebilir.
    • Microservice mimarisi ise, farklı fonksiyonları ayrı servisler halinde çalıştıran ve ölçeklenebilirlik sağlayabilen bir mimari türüdür.
    05:32JWT'nin Gerekliliği
    • Microservice mimarisinde her servisin kendi veritabanı olduğundan, kullanıcı yetkilendirmesini tek bir ortak veritabanından kontrol etmek mümkün değildir.
    • JWT, kullanıcı bilgilerini ve yetkilerini içeren bir token olarak çalışır ve servisler bu token'ı doğrulayarak kullanıcıya erişim sağlar.
    • JWT, stateless bir yapıya sahiptir; servisler token'ı doğrulamak için veritabanına erişmeye gerek duymaz, token'ın içindeki bilgilere göre erişimi kontrol eder.
    07:42JWT Yapısı
    • JWT, Base64 ile kodlanmış üç parçadan oluşan ve nokta ile ayrılmış bir stringdir.
    • JWT'nin üç parçası vardır: Header, Payload ve Signature.
    • Header kısmında JWT hakkında meta veriler ve kullanılan imzalama algoritması bilgileri bulunurken, Payload kısmında uygulama tarafından kullanılan kullanıcı bilgileri ve yetkileri yer alır.
    09:25AGEMAC Kriptografik Fonksiyonu
    • AGEMAC (Hashpace Message Authentication Code) fonksiyonu, mesajın yol üstünde değiştirilmediğini ve mesajın kimden geldiğini kanıtlamak için kullanılır.
    • Sadece mesajın hash'ini göndermek, mesajın değiştirilmediğini gösterir ancak hangi kullanıcının gönderdiğini belirtmez.
    • AGEMAC, mesajın hash'ine ek olarak bir secret key kullanır, bu sayede hem mesajın kimlik doğrulaması hem de bütünlüğünün doğrulanması sağlanır.
    11:21JWT ve Signature Oluşturma
    • JWT (JSON Web Token) içinde AGEMAC fonksiyonu kullanılır ve SHA-256 hash fonksiyonu ile çalışır.
    • Signature, header'ın base64 encode edilmiş hali, payload'un base64 encode edilmiş hali ve secret key kullanılarak oluşturulur.
    • Alıcı tarafı, header ve payload bilgilerini biliyor ve secret key'e sahipse, gelen signature'ın doğruluğunu kontrol edebilir.
    13:03Python ile JWT Oluşturma
    • Python'da JWT oluşturmak için "create_jwt" fonksiyonu kullanılır ve kullanıcı adı ve izin gibi parametreler alır.
    • JWT üç kısımdan oluşur: header, payload ve signature.
    • Header'da algoritma ismi (AGE MAC SHA-256) ve token türü (JWT) belirtilir.
    • Payload'a kullanıcı adı, izin ve expire gibi bilgiler eklenir, ancak expire zamanını geçerli hale getirmek için bir çözüm bulunmamaktadır.
    16:10JWT Token Oluşturma ve Doğrulama
    • JWT (JSON Web Token) token'ı header, payload ve signature olmak üzere üç bölümden oluşur.
    • Token oluşturma sırasında secret key kullanılır ve bu key SHA-256 ile hashlenerek hex formatına dönüştürülür ve base64 ile kodlanır.
    • JWT token'ı oluştururken kullanıcı adı, yetki ve son kullanma tarihi gibi bilgiler payload'a eklenir.
    17:55JWT Token Doğrulama İşlemi
    • JWT token doğrulama fonksiyonu, token'ı alıp geçerli olup olmadığını kontrol eder.
    • Doğrulama işlemi için token'ın header, payload ve signature kısımları base64 ile kodlanır ve JSON formatına dönüştürülür.
    • Doğrulama işlemi sırasında beklenen signature ile gelen signature karşılaştırılır, farklılık varsa token geçersiz kabul edilir.
    20:30Güvenlik Avantajları ve Saldırı Senaryoları
    • JWT token'ı güvenli bir şekilde kullanıcı yetkilerini taşıyabilir çünkü kimse secret key'e sahip olmadan token içeriğini değiştiremez.
    • Saldırgan, token içeriğini değiştirdiğinde signature doğrulama işlemi başarısız olur ve token geçersiz kabul edilir.
    • Geliştirici signature doğrulama işlemini unuttuğunda, saldırgan token içeriğini değiştirmek için fırsat bulabilir.
    26:30Microservice Architecture ve JWT Kullanımı
    • Microservice architecture'da JWT token'ları oluşturmak için merkezi bir yetkilendirme servisi kullanılabilir.
    • Login işlemi sırasında kullanıcı bilgileri doğrulandıktan sonra central authorization service, JWT token oluşturur.
    • Oluşturulan JWT token, kullanıcıya verilir ve kullanıcı bu token ile diğer microservice'lerle iletişim kurabilir.
    29:24JWT Token'ın Doğrulanması
    • Hikmet adlı kullanıcı JWT token gönderdiğinde, bu token'ın doğrulanması için çeşitli yöntemler kullanılabilir.
    • JWT token'ı doğrulamak için server'a sorulabilir veya server'dan public key istenebilir.
    • Simetrik algoritmalar kullanıldığında (AWS KMS, Vault gibi) key value storage'lar kullanılabilir ve secret'lar kod içine yazılmadan depolanabilir.
    31:32JWT Token'ın Zaafiyeti
    • JWT token'ın içindeki hash'in kırılması mümkün olabilir, bu da secret'ın bulunmasına yol açabilir.
    • Brüt force saldırısı için "common jwt secrets" adlı GitHub deposundaki liste kullanılabilir.
    • Hashcat gibi hash kırma yazılımları kullanılarak JWT token'ların secret'ı kırılabilir ve bu sayede yeni token oluşturulabilir.
    34:41Non-Algoritma Zaafiyeti
    • JWT security araştırırken "non-algorithm" konusuna denk gelinmiş olabilir.
    • Developer'ların hatalı kodlama yapması durumunda, algoritma "none" olarak değiştirilerek token doğrulaması atlanabilir.
    • Bu durumda, "none" algoritması kullanılarak token doğrulanmadan geçiş yapılabilir.
    38:10JWT Token'ın Güvenlik Sorunları
    • JWT token'ların cookie içerisinde HTTP only flag ile tutulması önerilse de, bu gerçekçi bir öneri değildir çünkü JavaScript'in token'a erişmesi gerekir.
    • JWT token'lar genellikle browser'ın local storage'da tutulur ve JavaScript tarafından erişilebilir.
    • XSS (Cross-Site Scripting) saldırılarında, saldırgan local storage'dan JWT token'ı okuyabilir ve hesap ele geçirme (account take-over) yapabilir.
    41:47JWT Token'ın Sorunları
    • Hikmet kullanıcısı siteye giriş yaparak JWT token alır, ancak kullanıcı banlandığında bu token'ı nasıl geçersiz kılabiliriz?
    • Cookie authentication'da kullanıcıyı banlamak için veritabanından ilgili cookie'yi sileriz, ancak JWT token'ları store ettiğimiz bir yer olmadığı için sadece expire olunca geçersizleşir.
    • Hikmet kullanıcısını veritabanından sildiğimizde bile JWT token'ı ile hala siteye erişebilir, bu da bir sorun oluşturur.
    43:30JWT Token'ları Geçersizleştirmek İçin Çözüm
    • Kritik sistemlerde JWT token'larını geçersizleştirmek için ayrı bir veritabanı (örneğin Redis) tutulabilir.
    • Banlanan kullanıcıların token'ları bu "invalidate tokens" listesine eklenir ve siteye gönderilen her JWT token önce bu listeye bakılır.
    • JWT token ile ilgili konular çok geniş bir alandır ve open ID, flow'lar, JWT authorization flow'lar gibi konular sonraki videolarda ele alınacaktır.

    Yanıtı değerlendir

  • Yazeka sinir ağı makaleleri veya videoları özetliyor