JWT Kodlayıcı

HS256, HS384, HS512 ile JSON Web Token'ları oluşturun ve imzalayın

Başlık

Yerel olarak çalışır · Gizli bilgi yapıştırmak güvenlidir

Yük

Yerel olarak çalışır · Gizli bilgi yapıştırmak güvenlidir

Gizli Anahtar

Yerel olarak çalışır · Gizli bilgi yapıştırmak güvenlidir

Kodlanmış JWT

Output will appear here…

Gizli anahtarınız asla tarayıcınızı terk etmez. Tüm imzalama istemci tarafında gerçekleşir.

Bunu da deneyin:JWT Kod Çözücü

JWT Kodlaması Nedir?

JWT kodlaması, JSON Web Token oluşturma işlemidir — kriptografik anahtar ile imzalanan taleplerin kompakt, URL'ye uygun bir dizesidir. Sonuç, RFC 7519 tarafından tanımlanan üç bölümlü bir token (başlık.yük.imza) olup sunucular oturum durumunu korumadan doğrulayabilir.

Header, imzalama algoritmasını (ör. HS256) ve token türünü bildirir. Payload, claim'leri içerir — konu (sub), son kullanma zamanı (exp) ve uygulamanızın ihtiyaç duyduğu özel veriler gibi anahtar-değer çiftleri. Her iki bölüm de JSON olarak serileştirilir, ardından base64url ile kodlanır. İmza, gizli anahtar kullanılarak kodlanmış header ve payload üzerinden hesaplanır ve üç segmenti birbirine bağlar.

Oturum çerezlerinin aksine JWT'ler kendi kendine yeterlidir: doğrulayıcının veritabanını sorgulaması veya harici bir hizmeti çağırması gerekmez. Bu durum, JWT tabanlı kimlik doğrulamayı REST API'lerde, mikro hizmetlerde ve durumsuz yetkilendirmenin gecikmeyi azalttığı ve yatay ölçeklendirmeyi kolaylaştırdığı tek sayfalı uygulamalarda popüler kılar.

Neden JWT Kodlayıcı Kullanılır?

JWT'leri elle oluşturmak base64url kodlama, JSON serileştirme ve HMAC hesaplaması gerektirir. Bu araç üç adımı da anında gerçekleştirir; böylece claim'leri doğru ayarlamaya odaklanabilirsiniz.

Anlık Token Oluşturma
Header, payload ve gizli anahtarı düzenleyin — imzalanmış JWT gerçek zamanlı olarak güncellenir. Derleme adımı yok, kütüphane kurulumu yok, tekrar eden kod yok.
🔒
Birden Fazla HMAC Algoritması
HS256, HS384 ve HS512 arasında tek tıklamayla geçiş yapın. Header otomatik olarak güncellenir ve imza hemen yeniden hesaplanır.
🛡️
Gizlilik Öncelikli İşleme
Tüm imzalama, Web Crypto API kullanılarak tarayıcınızda gerçekleşir. Gizli anahtarınız ve payload verileriniz hiçbir zaman cihazınızı terk etmez — sunucu yok, günlük yok, risk yok.
📋
Tek Tıklamayla Claim Yardımcıları
iat, exp+1h veya exp+24h zaman damgalarını tek bir düğmeyle ekleyin. Unix zaman damgalarını elle hesaplamaya veya mevcut epoch zamanını aramaya gerek yok.

JWT Kodlayıcı Kullanım Senaryoları

Ön Uç Kimlik Doğrulama Testi
Arka uç kimlik doğrulama sunucusu çalıştırmadan oturum açma akışlarını, token yenileme mantığını ve korumalı rota koruyucularını test etmek için belirli claim'ler ve son kullanma süreleri içeren token'lar oluşturun.
Arka Uç API Geliştirme
Yerel geliştirme sırasında yetkilendirme ara yazılımını, rol tabanlı erişim denetimini ve izin kontrollerini test etmek için özel sub, aud ve scope claim'leriyle test token'ları oluşturun.
DevOps ve CI/CD Süreçleri
Tam OAuth akışının gereksiz karmaşıklık katacağı dağıtım betikleri, entegrasyon testleri veya servisler arası iletişim için kısa ömürlü hizmet token'ları oluşturun.
QA ve Manuel Test
Süresi dolmuş token'lar, eksik alanlar, yanlış hedef kitle gibi uç durum claim'leriyle token'lar oluşturarak API'nizin doğru HTTP 401 veya 403 yanıtlarını döndürdüğünü doğrulayın.
Güvenlik Denetimi
Doğrulama mantığınızın zayıf veya uyumsuz imzaları doğru biçimde reddettiğini doğrulamak için farklı algoritmalar ve farklı uzunluklarda gizli anahtarlarla imzalanmış token'lar oluşturun.
Öğrenme ve Prototipleme
JWT'ye yeni başlayan öğrenciler ve geliştiriciler, token'ın her bölümünün nasıl çalıştığını anlamak için header alanlarını, claim yapılarını ve imzalama algoritmalarını deneyebilir.

HS256 ve HS384 ve HS512: HMAC Algoritması Karşılaştırması

Her üç algoritma da paylaşılan bir gizli anahtarla HMAC (Hash tabanlı İleti Kimlik Doğrulama Kodu) kullanır. Fark, imza uzunluğunu ve güvenlik marjini etkileyen temel karma işlevindedir. Çoğu uygulama için HS256 yeterli güvenlik sağlar. Uyumluluk gereksinimleri (ör. FIPS-140) daha güçlü bir karma zorunlu kıldığında veya token'larınız yüksek değerli yetkilendirme kararları taşıdığında HS384 veya HS512'yi seçin.

AlgoritmaKarmaİmzaHızTipik kullanım
HS256SHA-25632 BFastestGeneral purpose, default for most libraries
HS384SHA-38448 BFastHigher security margin, FIPS-140 compliant
HS512SHA-51264 BFastMaximum HMAC security, large payloads

Standart JWT Claim Referansı

RFC 7519, yedi kayıtlı claim tanımlar. Hiçbiri zorunlu değildir; ancak bunları doğru kullanmak birlikte çalışabilirliği ve güvenliği artırır. exp claim'i özellikle önemlidir — gizli anahtar değiştirilmezse son kullanma tarihi olmayan token'lar süresiz olarak geçerli kalır.

ClaimAdAçıklamaÖrnek
issIssuerWho issued the token"auth.example.com"
subSubjectWho the token represents"user-123"
audAudienceIntended recipient service"api.example.com"
expExpirationUnix timestamp — token invalid after this time1717203600
nbfNot BeforeUnix timestamp — token invalid before this time1717200000
iatIssued AtUnix timestamp when the token was created1717200000
jtiJWT IDUnique token identifier for revocation tracking"a1b2c3d4"

Kodda JWT Kodlama

Bu örnekler JWT'lerin programatik olarak nasıl oluşturulup imzalanacağını göstermektedir. Her kod parçacığı geçerli bir HS256 imzalı token üretir. Üretim sistemlerinde her zaman exp claim'ini ayarlayın ve en az 256 bit uzunluğunda kriptografik olarak rastgele bir gizli anahtar kullanın.

JavaScript (Web Crypto API)
async function signJWT(payload, secret, alg = 'HS256') {
  const header = { alg, typ: 'JWT' }
  const enc = new TextEncoder()

  // Base64url encode header and payload
  const b64url = (obj) =>
    btoa(JSON.stringify(obj)).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '')

  const h = b64url(header)
  const p = b64url(payload)

  // Sign with HMAC-SHA256
  const key = await crypto.subtle.importKey(
    'raw', enc.encode(secret),
    { name: 'HMAC', hash: 'SHA-256' }, false, ['sign']
  )
  const sig = await crypto.subtle.sign('HMAC', key, enc.encode(`${h}.${p}`))
  const s = btoa(String.fromCharCode(...new Uint8Array(sig)))
    .replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '')

  return `${h}.${p}.${s}`
}

// Usage
const token = await signJWT(
  { sub: 'user-123', name: 'Alice', iat: Math.floor(Date.now() / 1000) },
  'your-256-bit-secret'
)
// → "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOi..."
Python (PyJWT)
import jwt
import time

payload = {
    "sub": "user-123",
    "name": "Alice",
    "iat": int(time.time()),
    "exp": int(time.time()) + 3600,  # expires in 1 hour
}

# Sign with HS256 (default)
token = jwt.encode(payload, "your-256-bit-secret", algorithm="HS256")
# → "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOi..."

# Verify and decode
decoded = jwt.decode(token, "your-256-bit-secret", algorithms=["HS256"])
# → {"sub": "user-123", "name": "Alice", "iat": 1717200000, "exp": 1717203600}
Node.js (jsonwebtoken)
const jwt = require('jsonwebtoken')

const payload = {
  sub: 'user-123',
  name: 'Alice',
  role: 'admin',
}

// Sign — iat is added automatically
const token = jwt.sign(payload, 'your-256-bit-secret', {
  algorithm: 'HS256',
  expiresIn: '1h',    // sets exp claim
  issuer: 'auth.example.com',  // sets iss claim
})

// Verify
const decoded = jwt.verify(token, 'your-256-bit-secret')
// → { sub: 'user-123', name: 'Alice', role: 'admin', iat: ..., exp: ... }
Go (golang-jwt)
package main

import (
    "fmt"
    "time"
    "github.com/golang-jwt/jwt/v5"
)

func main() {
    claims := jwt.MapClaims{
        "sub":  "user-123",
        "name": "Alice",
        "iat":  time.Now().Unix(),
        "exp":  time.Now().Add(time.Hour).Unix(),
    }

    token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
    signed, _ := token.SignedString([]byte("your-256-bit-secret"))
    fmt.Println(signed)
    // → eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOi...
}

Sıkça Sorulan Sorular

JWT kodlama ile JWT çözme arasındaki fark nedir?
JWT kodlama, bir header, payload ve gizli anahtardan imzalanmış bir token oluşturur. JWT çözme ise bu işlemi tersine çevirir — base64url kodlu header ve payload'u JSON'a geri okur. Çözme gizli anahtarı gerektirmez; kodlama ise imzanın hesaplanması gerektiğinden her zaman gerektirir.
JWT gizli anahtarım ne kadar uzun olmalıdır?
HS256 için en az 256 bit (32 bayt) uzunluğunda bir gizli anahtar kullanın. HS384 için en az 384 bit (48 bayt), HS512 için en az 512 bit (64 bayt) kullanın. Daha kısa anahtarlar çoğu kütüphane tarafından teknik olarak kabul edilir, ancak HMAC imzasının etkin güvenliğini düşürür. Gizli anahtarları insan tarafından seçilen bir parola ifadesiyle değil, kriptografik olarak güvenli bir rastgele üretici ile oluşturun.
Bu aracı gerçek gizli anahtarlarla kullanmak güvenli midir?
Bu araç her şeyi Web Crypto API kullanarak tarayıcınızda işler — hiçbir sunucuya veri gönderilmez. Bununla birlikte, genel bir güvenlik uygulaması olarak üretim gizli anahtarlarını herhangi bir web aracına yapıştırmaktan kaçının. Üretim anahtar yönetimi için ortam değişkenlerini veya HashiCorp Vault ya da AWS Secrets Manager gibi bir gizli anahtar yöneticisini kullanın.
Uygulamamda HS256 mı yoksa RS256 mı kullanmalıyım?
Aynı hizmet hem token oluşturup hem de doğruluyorsa HS256 kullanın — daha hızlı ve daha basittir. Üçüncü taraf hizmetlerin token'larınızı oluşturma yetkisi olmadan doğrulaması gerektiğinde RS256 (asimetrik) kullanın. RS256, OAuth 2.0 sağlayıcılarında, OpenID Connect'te ve çok kiracılı SaaS mimarilerinde yaygındır.
JWT neden oluşturulduktan hemen sonra süresi doluyor?
exp claim'i milisaniye değil, saniye cinsinden Unix zaman damgası kullanır. exp değerini Date.now() olarak ayarlarsanız (milisaniye döndürür) token binlerce yıl sonra sona eriyormuş gibi görünür — ya da yanlışlıkla saniye beklenen yerde milisaniye değeri kullanırsanız kütüphaneler bunu zaten süresi dolmuş olarak yorumlayabilir. JavaScript'te her zaman Math.floor(Date.now() / 1000), Python'da int(time.time()) kullanın.
JWT payload'ına hassas veri koyabilir miyim?
Koyabilirsiniz, ancak koymamalısınız. JWT payload'u şifreli değil, base64url kodludur — token'a sahip olan herkes claim'leri okuyabilir. Payload'a parola, kredi kartı numarası veya kişisel veri saklamayın. Hassas bilgi eklemek zorundaysanız, tüm payload'u şifreleyen RFC 7516'da tanımlanan JWE (JSON Web Encryption) kullanın.
İmzaladıktan sonra payload'u değiştirirsem ne olur?
İmza geçersiz hale gelir. HMAC imzası, kodlanmış header ve payload'un tam baytları üzerinden hesaplanır. Herhangi bir değişiklik — bir boşluk eklemek veya tek bir karakteri değiştirmek bile — tamamen farklı bir imza üretir. Düzgün uygulanmış bir doğrulayıcı, imza uyuşmazlığı hatasıyla token'ı reddeder.