Yapay zekadan makale özeti
- Kısa
- Ayrıntılı
- Bu video, bir eğitmen tarafından sunulan, Spring Security ve JWT (JSON Web Token) teknolojilerinin nasıl kullanılacağını adım adım gösteren bir yazılım eğitim içeriğidir.
- Video, JWT'nin ne olduğunu açıklayarak başlayıp, Spring Security ile JWT kullanarak kimlik doğrulama ve yetkilendirme sisteminin nasıl oluşturulacağını detaylı olarak anlatmaktadır. İçerikte kullanıcı kayıt, token oluşturma, token doğrulama ve dashboard API erişimi gibi aşamalar gösterilmekte, ayrıca JWT Authentication Filter sınıfı oluşturma, token kontrolü ve Spring Security yapılandırması gibi konular ele alınmaktadır.
- Eğitim boyunca Spring Boot, Spring Data ve JWT kütüphanelerini kullanarak bir uygulama örneği oluşturulmakta, User entity, UserDetailsService implementasyonu ve UserRepository gibi kod örnekleri gösterilmektedir. Video sonunda Postman aracılığıyla uygulamanın test edilmesi ve token olmadan 401 hatası alınması, token ile "welcome dashboard" mesajı alınması gösterilmektedir.
- 00:08Giriş ve JSON Web Token Tanıtımı
- Bu derste Spring Security 6 kullanarak JSON Web Token (JWT) ile authorization ve authentication yöntemleri incelenecek.
- Spring Boot 3 ile birlikte Spring Data kullanarak kullanıcı bilgilerini veri tabanında tutan bir uygulama örneği yapılacak.
- Uygulamanın kaynak kodları açıklamalardaki linkte bulunabilir.
- 00:49JSON Web Token Yapısı
- JSON Web Token, web uygulamalarında sunucu ve istemci arasında güvenli bilgi paylaşımı için kullanılan bir iletişim protokolüdür.
- JWT, şifrelenmiş harf ve sayı dizisinden oluşur ve üç ana bölümden meydana gelir: Header, Payload ve Signature.
- Header bölümünde token'ın tipi ve kullanılan algoritma belirtilir, Payload bölümünde sunucu ile istemci arasında taşınacak veriler bulunur, Signature bölümünde ise header ve payload'ın şifrelenmesi için ortak bir secret key kullanılır.
- 03:02Uygulama Çalışma Mantığı
- Örnek uygulamada bir User nesnesi oluşturulacak ve save metoduyla veritabanına kaydedilecek.
- Kayıt işlemi başarılı olursa kullanıcıya bir token verilecek ve bu token dashboard API'ne erişim için gereklidir.
- Spring Security, JWT filter sayesinde gelen token'ı decode ederek kullanıcı ve şifresini alır, veritabanında sorgulama yapar ve kullanıcı varsa Security Context Holder sayesinde dashboard REST API'ye erişim sağlar.
- 06:02Proje Oluşturma
- Spring Initializr adresinden Java 17 kullanarak "spring-security-jwt-example" adında bir proje oluşturulacak.
- Projede Spring Security, Spring Data, Spring Web, JWT API, JWT Inflation ve JWT Jackson kütüphaneleri kullanılacak.
- IntelliJ IDEA'da proje açıldıktan sonra gerekli bağımlılıklar eklenecek.
- 08:32User Entity Oluşturma
- User entity'i oluşturulacak ve tablo adı "users" olarak ayarlanacak.
- Entity'de id, name, surname, username, password ve role değişkenleri bulunacak.
- Role için bir enum sınıfı oluşturulacak ve "USER" ve "ADMIN" değerleri eklenerek veritabanında string olarak tutulacak.
- 11:53UserDetailsService Implementasyonu
- Spring Security için UserDetailsService implementasyonu yapılacak.
- Implementasyonda getAuthorities, isAccountNonExpired, isAccountNonLocked, isCredentialsNonExpired ve isEnabled metodları override edilecek.
- Ayrıca getUserName ve getPassword metodları da override edilerek kullanıcı bilgilerine erişim sağlanacak.
- 15:48UserRepository Oluşturma
- User entity için bir repository katmanı oluşturulacak.
- Repository katmanında veritabanındaki kullanıcıyı var olup olmadığını bulmak için bir metod bulunacak.
- UserRepository interface'i oluşturulacak ve JpaRepository'ı extend ederek user nesnesi ve Long id döndürecek.
- 16:44Spring Data ile Kullanıcı Sorgulaması
- Spring Data kullanılarak kullanıcı adına göre username sorgulaması yapılacak ve var olan username sistem içerisinde varsa user nesnesi çekilecek.
- GVT'den pars edilen verileri aldıktan sonra data içerisinde kullanıcıların adı username'e göre sorgulanacak ve password kontrolü yapılarak giriş izni verilecek veya 403 hatası gönderilecek.
- Repository katmanı tamamlandıktan sonra GVT authentication filter sınıfı oluşturulacak.
- 17:33GVT Authentication Filter Sınıfı
- GVT authentication filter sınıfı HTTP isteklerini filtreleyen bir sınıf olacak ve OnePerRequestFilter sınıfından extend edilecek.
- Bu sınıf HTTP request ve response'lara cevap verecek ve gelen isteklerde token doğrulaması yapılacak.
- Gelen header içerisinde authorization bilgisi kontrol edilecek ve "Bearer" ile başlayan token değerine erişilecek.
- 22:21Token İşlemleri
- Token içerisindeki username değerini bulmak için GVTService adında bir sınıf oluşturulacak.
- GVTService sınıfı token içerisindeki verileri pars ederek şifresini kırabilmek ve token generate etmek için kullanılabilecek.
- FindUsername metodu ile gelen JWT içerisindeki username değeri çekilecek.
- 24:52Token Pars Etme İşlemi
- ExportToken metodu ile JWT'den gelen tüm talepler (claims) çekilecek ve subject bölümünden username değeri alınacak.
- Token değerini pars etmek için Claims nesnesi oluşturulacak ve Jwts sınıfından pars işlemi yapılacak.
- Token decode ederken hem encode hem decode ederken bir secret key kullanılıyor.
- 28:14Secret Key ve Security Context
- Secret key değeri application.yaml dosyasında tanımlanacak ve 64 karakter uzunluğunda benzersiz bir değer olacak.
- Pars edilen token'dan alınan username değeri Spring Security içerisindeki UserDetailsService kullanarak Spring'e aktarılacak.
- Username değişkeni ve SecurityContextHolder'daki authentication kontrol edilecek, eğer mevcut değilse UserDetailsService sınıfının loadByUsername metodu çağrılacak.
- 33:53JWT Token Kontrolü
- User servisin içindeki lot by name değişkeni ve user details değişkeni mevcut.
- Token içerisindeki user nesnesi ile user details nesnesinin birbirine uyup uymadığını kontrol etmek gerekiyor.
- Güvenlik açısından JWT kullanırken token kontrol metodu oluşturulacak ve hem token hem de user details verilecek.
- 35:06Token Kontrol İşlemleri
- Token control metodu içerisinde JWT'nin geçerli olup olmadığı kontrol edilecek.
- User name'in secret tarafından geçerli olup olmadığı tekrar kontrol edilecek.
- Tokenın zamanaşımı olup olmadığı (süresinin dolup dolmadığı) kontrol edilecek.
- 37:23JWT Servis İşlemleri
- Username password authentication sınıfından bir nesne oluşturulacak ve user details parametresi alarak kullanıcı bilgileri oluşturulacak.
- Get autosis metodu ile kullanıcının yetkileri bu nesneye verilecek.
- Authentication token sette tails metodu çağrılacak ve en güncel bilgiler Spring Security içerisindeki authentication token içerisine verilecek.
- 40:44Application Config Oluşturma
- Application config içerisinde user detail servise verilen user name'in veritabanında olup olmadığı kontrol edilecek.
- User repository kullanılarak find by user name ile kullanıcı aranacak ve bulunamazsa user not found hatası verilecek.
- Authentication provider nesnesi oluşturulacak ve user details service ile password encoder özellikleri setlenecek.
- 45:35Authentication Manager ve Security Configuration
- Authentication manager bini oluşturulacak ve authentication configuration nesnesi alacak.
- Security configuration kısmında security filter chain eklenerek uygulamaya hangi parametrelerle giriş yapılması gerektiği belirlenecek.
- CSRF ataklarını kapalı hale getirip, tüm HTTP tipi istekler için yetkilendirme yapılacağı belirlenecek.
- 50:09Session Management ve Authentication Provider
- Session management ifadesi ile kullanıcının oturum açtıktan sonra bir id ile eşleştirmesine gerek kalmayacak.
- Cookie veya çerez kullanılmayacak, JWT'nin token içerisindeki expression date'ine bakılacak.
- Authentication provider ile kullanıcı kimlik doğrulaması işlemi yapılacaktır.
- 51:18Spring Security Yapılandırması
- Provider tanımlaması yapılarak application config içerisinde yetkilendirme işlemi için user detail ve password encoder'ın çalışacağı belirleniyor.
- JVT authentication filter kullanılarak token doğrulaması ve pars edilmesi sağlanıyor.
- HTTP security build ile güvenlik yapılandırması tamamlanıyor.
- 53:30Authentication Controller Oluşturma
- Authentication controller adında bir controller oluşturuluyor ve login işlemi için bir save metodu ekleniyor.
- User response sınıfı token döndürmek için, user DTO sınıfı ise istemci tarafından gönderilecek bilgiler için oluşturuluyor.
- Controller'da request body içerisinde user DTO nesnesi alınıp, kayıt işlemi gerçekleştiriliyor.
- 56:17Servis Katmanı ve Token Üretimi
- Authentication service içerisinde register metodu oluşturuluyor ve user DTO nesnesi alınıyor.
- User nesnesi oluşturulup veritabanına kayıt işlemi gerçekleştiriliyor.
- JWT service içerisinde generateToken metodu oluşturuluyor ve token üretimi için gerekli bilgiler (subject, creation date, expiration date) set ediliyor.
- 59:42Login İşlemi
- Login işlemi için post mapping ile bir metot oluşturuluyor ve request body'de kullanıcı adı ve şifre isteniyor.
- Authentication manager kullanılarak kullanıcı adı ve şifrenin doğruluğu kontrol ediliyor.
- Veritabanından kullanıcı bilgileri çekiliyor ve generateToken metodu ile token üretilerek kullanıcıya döndürülüyor.
- 1:09:26Dashboard Controller
- Dashboard controller oluşturuluyor ve bu controller token ile erişilebilen bir yol olarak tasarlanıyor.
- Dashboard controller'da "Merhaba Dünya" mesajı dönen bir metot bulunuyor.
- Geçerli token ile ve veritabanında bulunan kullanıcı bilgileriyle dashboard'a erişim sağlanıyor.
- 1:11:04Spring Security ve Token Kullanımı
- Uygulama çalıştırıldı ve veritabanındaki tablo oluşturuldu.
- Spring Security devreye girdiğinde, token olmadan dashboard yolu için GET isteği atıldığında 401 hatası alındı.
- Token almak için S metodunda bilgiler dolduruldu ve gönderildiğinde token iletilmiş oldu.
- 1:12:08Login İşlemi ve Token Alma
- Login işlemi için username "burak" ve password "1234" gönderildiğinde başarılı bir şekilde token alındı.
- JWT kullanımının gösterildiği bu videoda, token ile korumalı yollara erişim sağlanabildi.
- Video sonunda abone olunması ve yorum bırakılması istendi.