HTTP | JWT

JWT (JSON Web Token) tipik olarak bir header + payload + signature'dan oluşur.

 

Header

 

JWT hakkında meta veri bilgilerini içerir.

 


{
  "alg": "HS256",
  "typ": "JWT"
}

Daha fazla başlık bulabilirsiniz, ancak öncekiler her zaman mevcut olacaktır.

 

Payload

 

Yük (payload), JWT'nin taleplerini içerir. Standart başlıklar şunlardır:

 


{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022
}

 

Signature

 

İmza, Encoded Header, Encoded Payload, bir Secret ve bir Kriptografik Algoritma kullanılarak oluşturulur.


eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5M
DIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

Desteklenen algoritmalar

Aşağıdaki algoritmalar hem İstemci hem de Sunucu JWT bileşenleri tarafından desteklenir.

 

 

JWT'yi imzalamak ve doğrulamak için OpenSSL kitaplıkları gereklidir, bir istisna dışında.

 

ML-DSA, kuantum sonrası imzalar

Üç ML-DSA algoritması, RFC 9964'ün kuantum sonrası JOSE algoritmalarıdır ve yukarıda söz edilen istisna da bunlardır: sgcCrypto paketinde saf Object Pascal ile uygulanmışlardır, bu yüzden hiçbir OpenSSL kitaplığı olmadan imzalar ve doğrularlar. İmza, JWS imzalama girdisi üzerinde boş bir bağlamla saf kipte FIPS 204 ML-DSA'dır ve token içinde base64url olarak taşınır. İmzalayıcı belirlenimcidir, bu yüzden aynı anahtar ve aynı girdi her zaman aynı imzayı üretir.

 

Enum değerleri jwtMLDSA44, jwtMLDSA65 ve jwtMLDSA87 değerleridir, ve yazdıkları alg başlığı ML-DSA-44, ML-DSA-65 ve ML-DSA-87 değerleridir. İstemci, bir PKCS#8 PEM özel anahtarı olan JWTOptions.Algorithms.MLDSA.PrivateKey ile imzalar, ve sunucu, bir SubjectPublicKeyInfo PEM açık anahtarı olan JWTOptions.Algorithms.MLDSA.PublicKey ile doğrular. Anahtarın parametre kümesi, algoritmanın adlandırdığı küme olmak zorundadır: aksi halde imzalama hata verir ve doğrulama False döndürür.

 

İmzalar büyüktür. Bir ML-DSA-44 imzası, ES256 için 64 bayta karşılık 2420 bayttır, bu yüzden bir token kabaca 3,2 KB base64url büyür, bir ML-DSA-87 imzası ise yaklaşık 6,2 KB büyütür. Bunu benimsemeden önce token'ın geçtiği her şeyin başlık boyutu sınırlarını denetleyin.

 

Anahtarlar ayrıca AKP JSON Web Key olarak da taşınabilir, RFC 9964 bölüm 3 ve 4. sgcMLDSA_ExportPublicJWK ve sgcMLDSA_ExportPrivateJWK bir tane yazar, sgcMLDSA_ImportJWK her iki biçimi de okur, ve sgcMLDSA_ImportJWKAsPEM bir JWK'yi doğrudan iki bileşenin okuduğu PEM dizelerine dönüştürür. Özel bir JWK, 32 baytlık tohumu priv içinde saklar; bölüm 4'ün tanımladığı tek özel biçim budur, bu yüzden genişletilmiş bir özel anahtar JWK olarak yazılamaz. Dört fonksiyonun tamamı sgcHTTP_JWT_MLDSA içinde bildirilmiştir.

 

* ML-DSA algoritmaları sgcCrypto paketine ihtiyaç duyar. O olmadan enum değerleri yine de vardır, bu yüzden biriyle kaydedilmiş bir form yine yüklenir, ancak imzalama hata verir ve her ML-DSA token'ı reddedilir.

Bileşenler

 

 

 

* JWT Bileşenleri en az Indy sürüm 10.6.0.5169 veya sgcWebSockets Enterprise Edition gerektirir.