0Pricing
Java Academy · Ders

JWT: Yapı, Oluşturma ve Doğrulama

JWT yapısını elle koddan çözün, gizli anahtarla imzalanmış belirteçler oluşturun ve çerçeveler olmadan talepleri doğrulayın.

JWT: Yapı, Oluşturma ve Doğrulama, CoddyKit'te ücretsiz bir Java Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Java Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Java Academy kursu toplamda 4 dersten oluşur.

JWT Nedir

JSON Web Token (JWT), taraflar arasında beyanları iletmek için kullanılan, sıkıştırılmış ve URL açısından güvenli bir belirteç biçimidir. JWT imzalanır (ve isteğe bağlı olarak şifrelenir). Kendi kendine yeterlidir — beyanları doğrulamak için veritabanı sorgusu gerekmez.

JWT Yapısı: Header.Payload.Signature

Bir JWT, noktalarla ayrılmış üç Base64URL kodlamalı bölümden oluşur: header.payload.signature. Başlık algoritmayı belirtir. Yük, beyanları içerir. İmza, bütünlüğü doğrular.

// Example JWT:
// eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9      <- header
// .eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkFsaWNlIn0  <- payload
// .SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c     <- signature

Kod Açımı Yapılmış Başlık ve Yük

JSON'u görmek için her bölümü Base64URL ile kodunu çözün. Yük, "beyanlar" içerir — standart olanlar: sub (konu), iss (yayımcı), exp (sona erme), iat (oluşturulma zamanı).

// Header:
{ "alg": "HS256", "typ": "JWT" }
// Payload:
{ "sub": "user-42", "name": "Alice", "role": "ADMIN",
  "iat": 1716000000, "exp": 1716003600 }

Elle JWT Oluşturma (HS256)

Başlık ve yük JSON'unu oluşturun, her birini Base64URL ile kodlayın, noktayı kullanarak birleştirin; ardından header.payload üzerinde HMAC-SHA256 hesaplayıp imza olarak ekleyin.

String header  = Base64.getUrlEncoder().withoutPadding()
    .encodeToString("{\"alg\":\"HS256\",\"typ\":\"JWT\"}".getBytes());
String payload = Base64.getUrlEncoder().withoutPadding()
    .encodeToString("{\"sub\":\"user-42\",\"exp\":9999999999}".getBytes());
String sigInput = header + "." + payload;
byte[] sig = computeHmac(secretKey, sigInput);
String jwt = sigInput + "." + Base64.getUrlEncoder().withoutPadding().encodeToString(sig);

JWT'yi Elle Doğrulama

Noktalara göre ayırın, başlığın ve yükün kodunu çözün, header.payload üzerinde HMAC'yi yeniden hesaplayın, imzayla karşılaştırın ve exp değerinin gelecekte olduğunu denetleyin.

String[] parts = jwt.split("\\.");
String sigInput = parts[0] + "." + parts[1];
byte[] expectedSig = computeHmac(secretKey, sigInput);
byte[] actualSig   = Base64.getUrlDecoder().decode(parts[2]);
if (!MessageDigest.isEqual(expectedSig, actualSig)) throw new SecurityException("Invalid signature");
// Decode payload and check exp:
String payloadJson = new String(Base64.getUrlDecoder().decode(parts[1]));
// parse JSON and check exp > now

java-jwt Kitaplığını Kullanma (Auth0)

com.auth0:java-jwt kitaplığı, akıcı bir API ile JWT oluşturma ve doğrulama işlemlerini basitleştirir.

// Create:
Algorithm alg = Algorithm.HMAC256(secretKey);
String token = JWT.create()
    .withSubject("user-42")
    .withClaim("role", "ADMIN")
    .withExpiresAt(Instant.now().plusSeconds(3600))
    .sign(alg);
// Verify:
JWTVerifier verifier = JWT.require(alg).withIssuer("my-service").build();
DecodedJWT decoded = verifier.verify(token);
System.out.println(decoded.getSubject());

HS256 ve RS256

HS256, paylaşılan bir simetrik anahtar kullanır — basittir ancak hem yayımcı hem de doğrulayıcı anahtar konusunda birbirine güvenmelidir. RS256, RSA kullanır: gizli anahtarla imzalar, genel anahtarla doğrular — herhangi bir hizmetin imzalama anahtarını bilmeden doğrulama yaptığı çok hizmetli mimariler için uygundur.

JWT'leri Depolama: HttpOnly Çerezler ve localStorage

JWT'leri, Secure ve SameSite=Strict bayraklarıyla HttpOnly çerezlerde depolayın (JS tarafından erişilemez — XSS hırsızlığını önler). localStorage kullanmaktan kaçının — XSS saldırıları bunu okuyabilir.

// Set JWT as HttpOnly cookie in Spring:
ResponseCookie cookie = ResponseCookie.from("jwt", token)
    .httpOnly(true).secure(true).sameSite("Strict")
    .path("/").maxAge(3600).build();
response.addHeader(HttpHeaders.SET_COOKIE, cookie.toString());

Yenileme Belirteçleri

JWT'lerin sona erme süresi kısadır (15 dakika). Yenileme belirteçlerinin (opak, sunucu tarafında depolanan) sona erme süresi daha uzundur. İstemci, yeniden kimlik doğrulaması yapmadan yeni bir JWT almak için yenileme belirtecini gönderir.

JWT İptal Etme Zorluğu

JWT'ler durum bilgisizdir — yerleşik bir iptal mekanizması yoktur. Süresi dolmadan oturum kapatmayı desteklemek için kısa bir sona erme süresiyle birlikte Redis'te iptal edilmiş JWT kimliklerinden (jti beyanı) oluşan bir engelleme listesi kullanın.

// On logout, add the jti to a Redis blocklist with TTL = token expiry:
redis.set("revoked:" + jti, "1", ex, 3600);
// On verify, check blocklist:
if (redis.exists("revoked:" + decoded.getId())) throw new SecurityException("Token revoked");

Spring Security JWT Tümleştirmesi

Spring Security'de, her istekte JWT'yi ayıklamak, doğrulamak ve SecurityContext'i JWT'den ayarlamak için JwtAuthenticationFilter extends OncePerRequestFilter uygulayın.

String token = request.getHeader("Authorization").replace("Bearer ","");
DecodedJWT decoded = verifier.verify(token);
String userId = decoded.getSubject();
UsernamePasswordAuthenticationToken auth =
    new UsernamePasswordAuthenticationToken(userId, null, authorities);
SecurityContextHolder.getContext().setAuthentication(auth);

Hızlı Kontrol

HS256 ve RS256 JWT imzalama arasındaki temel yapısal fark nedir?

Özet

JWT = header.payload.signature (Base64URL). HMAC (HS256) veya RSA (RS256) ile imzalayın. İmzayı ve exp beyanını doğrulayın. HttpOnly çerezlerde depolayın. Kısa sona erme süresi ve yenileme belirteçleri kullanın. Redis'teki jti engelleme listesiyle iptal edin.

Sıkça Sorulan Sorular

“JWT: Yapı, Oluşturma ve Doğrulama” dersi ücretsiz mi?

Evet — “JWT: Yapı, Oluşturma ve Doğrulama” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Java Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Java Academy kursu toplamda 4 dersten oluşur.

“JWT: Yapı, Oluşturma ve Doğrulama” dersinde ne öğreneceğim?

JWT yapısını elle koddan çözün, gizli anahtarla imzalanmış belirteçler oluşturun ve çerçeveler olmadan talepleri doğrulayın. Java Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Java Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Java Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.

“JWT: Yapı, Oluşturma ve Doğrulama” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Java Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Java Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. MessageDigest ile Şifreleme Özeti Oluşturma
  2. AES Simetrik Şifreleme
  3. İleti Bütünlüğü için HMAC-SHA256
  4. JWT: Yapı, Oluşturma ve Doğrulama
← Java Academy Sayfasına Dön