• Buradasın

    Milli E-Ticaret Uygulamasında JWT ve Refresh Token Yapılandırması Eğitimi

    youtube.com/watch?v=j_Et17fWL5Q

    Yapay zekadan makale özeti

    • Bu video, bir yazılım eğitmeni tarafından sunulan teknik bir eğitim içeriğidir. Eğitmen, milli e-ticaret uygulamasında JWT (JSON Web Token) ve refresh token mekanizmasını adım adım anlatmaktadır.
    • Video, JWT ve refresh token konfigürasyonlarının tüm sürecini kapsamaktadır. İçerikte öncelikle JWT'in life time validator properties ayarı yapılmakta, ardından refresh token kavramı açıklanmakta, veritabanı tasarımı yapılarak refresh token ve ömrü propertileri eklenebilmektedir. Daha sonra token oluşturma, güncelleme ve yönetimi, HTTPInterceptor kullanımı ve token süresinin dolması durumunda otomatik yenileme işlemleri gösterilmektedir.
    • Eğitim, kullanıcı deneyimini iyileştirmek için access token'ın süresi dolunca kullanıcıyı login sayfasına göndermeden yeni bir access token almayı sağlayacak refresh token mekanizmasını detaylı şekilde ele almaktadır. Ayrıca, Facebook, Google, Twitter gibi farklı login yöntemlerinde token yönetimi, CQRS pattern kullanımı ve global error handling gibi konular da videoda yer almaktadır. Eğitmen, serinin ilerleyen bölümlerinde sepete ekleme, barkod uygulaması, loklama ve tofactor authenticator gibi konuları ele alacağını belirtmektedir.
    00:01Milli E-Ticaret Uygulamasında JWT Sorunları
    • Bu derste milli e-ticaret uygulamasında iki husus ele alınacak: JWT (JSON Web Token) yapılanmasında balans ayarı ve refresh token mantığının uygulanması.
    • JWT yapılanmasında create access token metodunda saniye cinsinden değer alındığı belirtilmişken, fonksiyon dakika cinsinden çalışıyor.
    • Facebook, Google ve normal giriş üzerinden JWT üretildiğinde 15 saniyelik ömre sahip tokenlar oluşturuluyor.
    02:12JWT Ömrü Sorunu
    • 15 saniyelik ömre sahip JWT ile yapılan istekler başarılı sonuçlanıyor, ancak 15 saniye geçtikten sonra bile JWT hala geçerli kabul ediliyor.
    • Bu sorunun sebepleri arasında sunucu farkı, zaman farkı veya arada bir zaman kayması olabilir.
    • JWT'nin belirlenen ömrünü koruması için balans ayarı yapılması gerekiyor.
    03:43Balans Ayarı Uygulaması
    • API kısmında JWT ile ilgili temel konfigürasyonlara gidilerek token validation parametrelerine bakılıyor.
    • Life time validator properties parametresine bir değer vermek gerekiyor.
    • Life time validator, dead time ve expert parametreleri alan ve geriye dönen bir fonksiyon temsil eden bir delegate.
    05:30Life Time Validator Fonksiyonu
    • Expert parametresi gelen JWT isteklerinde tokenın expire olup olmadığını kontrol ediyor.
    • Fonksiyonda, expert değeri null değilse ve expire değeri utc now'dan büyük olduğu sürece token geçerli kabul ediliyor.
    • Bu yapıyla tokenın ömrü ne kadarsa, milisaniyeye kadar geçtiği takdirde expire ediyor ve istekler 401 Unauthorized cevabını alıyor.
    07:37Sonuç
    • JWT yapılanması geliştirilmiş ancak tokenın ömrüne uygun çalışma sergilemiyorsa, life time validator properties üzerinden konfigürasyon yapılabilir.
    • Bu konfigürasyon sayesinde access token belirtildiği süre zarfında saniyesi saniyesine güvenli bir şekilde kullanılabilir.
    08:16Refresh Token Nedir?
    • Refresh token, access token'ın süresi dolunca kullanıcıyı tekrar login sayfasına göndermek yerine yeni bir access token alabilmemizi sağlayan bir mekanizmadır.
    • Access token'ın süresi dolduğunda, refresh token kullanılarak kullanıcıya yeni bir access token verilerek işlemi kalınan yerden devam ettirebiliriz.
    • Refresh token, access token gibi bir yetki değeri değil, sadece access token alabilmemizi sağlayan bir özel anahtardır.
    12:22Refresh Token'ın Çalışma Prensibi
    • Refresh token'ın ömrü access token'ın ömründen biraz daha uzun olmalıdır, böylece access token'ın süresi dolduğunda refresh token kullanılarak yeni bir access token alınabilir.
    • Access token'ın süresi dolduğunda kullanıcı aktif işlem yapmaya çalıştığında, refresh token sunucuya gönderilir ve doğrulandığında yeni bir access token üretilir.
    • Refresh token'ın da süresi dolduğunda kullanıcı tekrar manuel olarak login olmalıdır, aksi halde güvenlik açığına sebep olabilir.
    16:42Refresh Token'ı Uygulama
    • Refresh token'ı uygulamak için kullanıcıya hem access token hem de refresh token oluşturulmalıdır.
    • Refresh token'ın bir yerde tutulması gerekir, genellikle kullanıcı tablosuna eklenir.
    • Refresh token değerleri kullanıcı tablosuna koyulur çünkü refresh token'lar kullanıcılarla birebir ilişkilidir.
    18:48Refresh Token Özelliklerinin Tanımlanması
    • Domain katmanında kullanıcıya karşılık gelen entity'de iki özellik oluşturuluyor: refresh token değeri ve refresh token'ın ömrü.
    • Her kullanıcıya özel bir refresh token değeri üretiliyor ve bu değer kullanıcı satırının bulunduğu alanda tutuluyor.
    • Refresh token'ın ömrü de ayrı bir propertide tutuluyor.
    20:00Veritabanı Migrations İşlemi
    • Yapılan değişiklikleri veritabanına yansıtmak için yeni bir migration oluşturuluyor.
    • Oluşturulan migration çalıştırılarak veritabanına gönderiliyor.
    • Bu işlem sonrası veritabanında her kullanıcı için refresh token ve refresh token ömrü verileri mevcut olacaktır.
    20:38Refresh Token Oluşturma Fonksiyonu
    • Token oluşturma servisine yeni bir create refresh token fonksiyonu ekleniyor.
    • Refresh token herhangi bir türde oluşturulmuş random bir değer olabilir: sayısal, alfanumerik veya uniqe identi fire türünde.
    • Önemli olan refresh token'ın tahmin edilebilir olmamasıdır.
    22:08Refresh Token Üretimi
    • Refresh token için 32 indeksli bir byte dizisi oluşturuluyor.
    • RandomNumberGenerator sınıfı kullanılarak rastgele bir değer üretiliyor.
    • RandomNumberGenerator nesnesi IDisposable olduğundan using bloğuyla kullanılıyor.
    23:39Using Bloğu Kullanımı
    • Using bloğu, IDisposable olan nesnelerin referanslarının başına konulduğunda, o nesne metot skobundan çıkana kadar kalıyor.
    • Metot işlemi bittiğinde nesne otomatik olarak dispos ediliyor.
    • Using bloğunu hangi versiyonu kullanacağımız, nesnenin işleminden sonra farklı işlemler olup olmadığına bağlı olarak belirleniyor.
    25:07Random Değer Üretimi ve Token Oluşturma
    • Random üzerinden "get bytes" fonksiyonu kullanılarak belirli bir sayıda rastgele değerler oluşturuluyor.
    • Oluşturulan değerler "convert to base altmışdört string" fonksiyonu ile metinsel hale dönüştürülüyor.
    • Fonksiyon string olarak değer döndürüyor ve interface'de bu dönüş tipi olarak belirtiliyor.
    26:04Refresh Token Oluşturma
    • "Create access token" fonksiyonu tetiklendiğinde "create refresh token" fonksiyonu çağrılıyor.
    • Refresh token değeri oluşturulduktan sonra süresi belirlenecek.
    • Oluşturulan refresh token değeri, token nesnesine bir property olarak ekleniyor.
    28:19Refresh Token'ı Veritabanına Kaydetme
    • Login süreçlerinde oluşturulan refresh token'ın veritabanına kaydedilmesi gerekiyor.
    • Facebook, Google, Twitter gibi dış login işlemlerinde "create user external esseng" fonksiyonu token üretim sürecini devreye sokuyor.
    • Manuel login de benzer bir süreç geçerli olabilir.
    30:42Refresh Token Güncelleme Servisi
    • User servisinde "update refresh token" fonksiyonu oluşturuluyor.
    • Bu fonksiyon, kullanıcıya özel refresh token değeri alıyor ve kullanıcı ID'si string olarak geçiriliyor.
    • User manager üzerinden "find by id" fonksiyonu kullanılarak kullanıcı bulunuyor.
    32:55Refresh Token Güncelleme İşlemi
    • App referansıyla gelen user için refresh token güncelleme işlemi yapılacaktır.
    • Refresh token güncelleme işleminde süreyi parametrik olarak almak önemlidir çünkü access token'ın ömrü bilinmeyebilir.
    • Access token'ın üzerine eklenecek süre (refresh token life time) parametre olarak belirtilmelidir.
    34:52Update İşlemi ve Hata Yönetimi
    • Refresh token güncelleme işlemi tamamlandıktan sonra user manager üzerinden update fonksiyonu çağrılır.
    • Eğer user null ise not found user exception fırlatılabilir.
    • Global olarak bir error operasyonu çekilecek ve hatalar ilgili derste ele alınacaktır.
    36:33External Kısım ve Token Oluşturma
    • Token oluşturulduktan sonra refresh token oluşturma işlemi yapılmalıdır.
    • User servisi IOC'den talep edilerek gerekli operasyon gerçekleştirilebilir.
    • User'ı direkt göndermek daha az maliyetli olup, user'ı tekrar arayıp bulmaktan daha verimlidir.
    38:44Parametreler ve Testler
    • Access token date ve refresh token life time parametreleri belirtilmelidir.
    • Testler için saniye cinsinden değerler kullanılabilir, gerçek uygulamada access token 1 saat, refresh token 15 dakika gibi değerler kullanılabilir.
    • Parametre isimlendirmesi access token'ın üzerine eklenecek süre anlamına gelecek şekilde yapılmalıdır.
    41:22Manuel Login İçin Güncelleme
    • Manuel login için de aynı refresh token güncelleme işlemi gerçekleştirilmesi gerekir.
    • Hem external hem de internal operasyonlarda refresh token güncelleme işlemi gerçekleştirilmiş olur.
    • Uygulama test edildiğinde sunucu hatası alındı ve hata kaynağı bulunmaya çalışıldı.
    44:08Kayıt İşlemi Hatası ve Çözümü
    • Kullanıcı kayıt işlemi sırasında bir hata oluştu ve sistem patladı.
    • Hata kaynağı refresh token'ın nullable olarak ayarlanmamasıydı, bu nedenle sistem refresh token değerini bulamadı.
    • Dokuzuncu migration oluşturup veritabanını güncelledikten sonra kayıt işlemi başarıyla gerçekleştirildi.
    49:59Refresh Token Kullanımı
    • Refresh token ve süresi başarıyla veritabanına kaydedildi.
    • Test amacıyla access token ve refresh token için her ikisi de 15 saniye süre belirlendi.
    • Gerçek uygulamada access token için 45 dakika, refresh token için 1 saat süre kullanılması önerildi.
    51:00Refresh Token Login İşlemi
    • Refresh token üzerinden login işlemi için OutController'a refresh token login isminde bir action oluşturuldu.
    • Refresh token değeri query string olarak alınması tercih edildi.
    • Refresh token login işlemi için CQRS pattern kullanılarak request ve response nesneleri oluşturuldu.
    57:36Refresh Token Login İşlemi Detayları
    • Refresh token login işleminde önce kullanıcı veritabanından sorgulanacak.
    • Kullanıcının refresh token'ına sahip olup olmadığı ve token'in expire olup olmadığı kontrol edilecek.
    • Şartlar doğruysa yeni bir access token üretilip kullanıcıya gönderilecek ve refresh token yenilenip veritabanında güncellenecek.
    58:28Refresh Token ile Login İşlemi
    • User servisinde kullanıcı ekleme ve refresh token güncelleme işlemleri yapıldıktan sonra, şimdi refresh token üzerinden login işlemi yapılacak.
    • Refresh token login işlemi authorization servisinde gerçekleştirilecek ve bu bir internal operasyon olarak düşünülecek.
    • Refresh token login fonksiyonu, sadece refresh token bilgisine ihtiyaç duyacak ve password gibi diğer bilgilere ihtiyaç duymayacak.
    59:40Refresh Token İşlemi Detayları
    • User manager üzerinden users tablosunda verilen refresh token ile eşleşen bir değer olup olmadığı sorgulanacak.
    • Eğer kullanıcı bulunursa ve refresh token'ın and date değeri şu anda zamandan büyükse, kullanıcı adil olan refresh token süresinin belirlenen fazlalık sürede bir istek göndermiş demektir.
    • Bu durumda, create access token fonksiyonu aracılığıyla 15 saniyelik token üretilip kullanıcıya geri gönderilecek.
    1:01:30Token Güncelleme ve Hata Yönetimi
    • Yeni refresh token ile ilgili kullanıcı güncellenecek ve access token date değeri ile access token üzerine eklenecek refresh token ömrü belirlenecek.
    • Kullanıcı bulunamazsa, not found user exception fırlatılacak.
    • Out servisinde refresh token login operasyonu gerçekleştirilecek ve elde edilen token geriye döndürülecek.
    1:04:18Test İşlemleri
    • İşlemleri test etmek için post üzerinden istek gönderilecek.
    • Access token 15 saniye, refresh token ise 30 saniye geçerli olacak.
    • Login işlemi için username, email ve password bilgileri gönderilerek access token ve refresh token alınıyor.
    1:08:00Token Süreleri ve Refresh İşlemi
    • Doğru endpoint verilmediğinden 401 hatası alınıyor, ancak doğru endpoint verildiğinde ilgili veriler getiriliyor.
    • Access token 15 saniye sonra süresi doluyor ve 401 hatası veriyor, bu süre dolmadan refresh token kullanılarak yeni bir access token talep edilebilir.
    • Refresh token 30 saniye geçmeden kullanılabiliyor, bu süre dolduktan sonra kullanıcı adı veya şifre hatalı hatası veriyor çünkü kullanıcı süresi dolmuş oluyor.
    1:10:24Refresh Token Sorunları ve Çözümleri
    • Refresh token gönderiminde URL protokolünde artı (+) ifadesi nedeniyle farklı bir değer olarak algılanıyor ve hata veriyor.
    • Bu sorunu çözmek için HTTP protokolünden transfer edilebilecek hale getirip sunucuda geri çözmek (encode-decode) bir yöntem olabilir.
    • Alternatif olarak refresh token form üzerinden gönderilebilir, bu şekilde query sorunları yaşanmaz.
    1:12:29Refresh Token Kullanımı ve Sonraki Adımlar
    • Form üzerinden gönderilen refresh token ile yeni bir access token ve refresh token üretiliyor.
    • Veritabanında yeni refresh token oluşturuluyor ve süresi dolmadan tekrar kullanılabiliyor.
    • Bu sistem sayesinde kullanıcı işlemi yarıda bırakıp login olma gibi bir derdi olmayacak, refresh token kullanarak devam edebilir.
    1:14:14Refresh Token İşlemi
    • HTTP error interceptor'ın 401 hatası aldığı durumlarda refresh token ile ilgili işlem yapması gerekiyor.
    • Kullanıcı 401 hatası aldığında, refresh token ile yeni bir istekte bulunulacak ve kullanıcıya yeni bir access token sağlanabilecek.
    • Eğer refresh token geçersizse ve 401 hatası alınırsa, kullanıcı login sayfasına yönlendirilecek.
    1:15:33Refresh Token'ı Storage'a Kaydetme
    • Login işlemi yapıldıktan sonra elde edilen refresh token'ı saklamak gerekiyor, bu token'ı access token gibi bir yerde tutmak gerekiyor.
    • Login işlemlerinin yapıldığı user-out servisinde token response içerisinde hem access token hem de refresh token barındırılacak.
    • Tüm login işlemlerinde (Google, Facebook vb.) ilgili değerin storage'a kaydedilmesi gerekiyor.
    1:18:33Refresh Token İşlemi İçin Servis Oluşturma
    • Refresh token işlemi için yeni bir fonksiyon oluşturulacak ve bu fonksiyona sadece refresh token ve callback function gerekli.
    • Refresh token işlemi için HTTP post isteği yapılacak ve action olarak "refresh token login" kullanılacak.
    • Refresh token işlemi asenkron olarak çalışacak ve token response gelecek.
    1:21:17Refresh Token İşleminin Kullanıcılara Bilgi Vermemesi
    • Refresh token işlemi sırasında kullanıcıya bilgi vermek istenmiyor, kullanıcı farkında olmadan tekrar yetkilendiriliyor.
    • Kullanıcının ilgisini bozmak istenmediği için bu süreçler kullanıcıya bildirilmiyor.
    • Refresh token işlemi için user-out service üzerinden tetikleme yapılıyor ve local storage'dan refresh token değeri alınıyor.
    1:23:55Test İşlemi
    • Uygulama test ediliyor ve giriş yapıldığında refresh token'ın gelip gelmediği kontrol ediliyor.
    • Farklı giriş yöntemleri (Google, Facebook) ile test edildiğinde her seferinde farklı refresh token'lar geldiğini görüyoruz.
    • Veritabanı sorunu nedeniyle product isteği başarılı sonuç vermedi, ancak sistem çalıştığını gösteriyor.
    1:25:43Access Token ve Refresh Token Testi
    • Giriş yapılarak access token üretildi ve 15 saniye boyunca access token üzerinden istekler gönderildi.
    • Access token süresi dolduğunda, custom bölümüne tekrar tıklanınca yeni bir access token ile işlem devam etti.
    • Refresh token her 15 saniye sonra network üzerinden bir istek daha gönderiliyor ve doğrulandığında yeni access token elde ediliyor.
    1:27:01Refresh Token Süresi Dolduğunda Duyarlılık
    • Refresh token süresi dolduğunda, kullanıcı login sayfasına yönlendirilmeli.
    • Interceptor üzerinden 401 hatası geldiğinde, kullanıcıya hata mesajı gösteriliyor.
    • Refresh token süresi dolduğunda interceptor devreye girmiyor ve kullanıcıyı yormadan yetki uzatma işlemi gerçekleştiriliyor.
    1:29:19Gelecek Dersler ve Proje Planı
    • E-ticaret yazılımında sepete ekleme ve barkod uygulaması yapılacak.
    • Real-time uygulama geliştirilecek, şifremi unuttum ve tofactor authenticator gibi özellikler eklenecek.
    • Sonraki derslerde global error handling, loklama veya tofactor authenticator teknolojisi konuları ele alınacak.
    1:31:57Eğitim Serisi Hakkında Düşünceler
    • Bu tarz uzun eğitim serileri zaman gerektiriyor ve verimli olmayabilir.
    • Küçük ama lokal kritik noktalara temas edebilecek seriler veya a'dan z'ye bir teknolojiyi anlatan seriler daha verimli olabilir.
    • Eğitim serisi ucu açık anlatımla sunulmuş olup, izleyicilerin kendi yollarını seçmeleri sağlanmalı.

    Yanıtı değerlendir

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