HTTP | JWT

JWT (JSON Web Token) bestaat doorgaans uit een header + payload + handtekening.

 

Header

 

Bevat de metadata-informatie over de JWT.

 


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

U kunt meer headers vinden, maar de vorige zijn altijd aanwezig.

 

Payload

 

De payload bevat de claims van de JWT. De standaardheaders zijn de volgende:

 


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

 

Handtekening

 

De handtekening wordt gemaakt met behulp van de gecodeerde Header, gecodeerde Payload, een geheim en een cryptografisch algoritme.


eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5M
DIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

Ondersteunde algoritmen

De volgende algoritmen worden ondersteund door zowel Client- als Server JWT-componenten.

 

 

OpenSSL-bibliotheken zijn vereist om de JWT te ondertekenen en te verifiëren, op één uitzondering na.

 

ML-DSA, post-quantum handtekeningen

De drie ML-DSA-algoritmen zijn de post-quantum JOSE-algoritmen van RFC 9964, en zij vormen de uitzondering hierboven: ze zijn in puur Object Pascal geïmplementeerd in het sgcCrypto-pack, zodat ze ondertekenen en valideren zonder dat er een OpenSSL-bibliotheek aanwezig is. De handtekening is FIPS 204 ML-DSA in de pure modus met een lege context over de JWS-ondertekeningsinvoer, in het token meegedragen als base64url. De ondertekenaar is deterministisch, dus dezelfde sleutel en dezelfde invoer leveren altijd dezelfde handtekening op.

 

De enum-waarden zijn jwtMLDSA44, jwtMLDSA65 en jwtMLDSA87, en de alg-header die ze schrijven is ML-DSA-44, ML-DSA-65 en ML-DSA-87. De client ondertekent met JWTOptions.Algorithms.MLDSA.PrivateKey, een PKCS#8 PEM-privésleutel, en de server valideert met JWTOptions.Algorithms.MLDSA.PublicKey, een SubjectPublicKeyInfo PEM-publieke sleutel. De parameterset van de sleutel moet die zijn die het algoritme noemt: ondertekenen geeft anders een fout, en valideren geeft False terug.

 

Handtekeningen zijn groot. Een ML-DSA-44-handtekening is 2420 bytes tegenover 64 voor ES256, dus een token groeit met ruwweg 3,2 KB aan base64url, en een ML-DSA-87-handtekening met ongeveer 6,2 KB. Controleer de limieten voor headergrootte van alles waar het token doorheen gaat voordat u het toepast.

 

Sleutels kunnen ook worden meegedragen als AKP JSON Web Keys, RFC 9964 secties 3 en 4. sgcMLDSA_ExportPublicJWK en sgcMLDSA_ExportPrivateJWK schrijven er een, sgcMLDSA_ImportJWK leest beide vormen, en sgcMLDSA_ImportJWKAsPEM zet een JWK rechtstreeks om naar de PEM-tekenreeksen die de twee componenten lezen. Een privé-JWK slaat de 32-byte seed op in priv, de enige privévorm die sectie 4 definieert, zodat een uitgebreide privésleutel niet als JWK kan worden geschreven. Alle vier de functies zijn gedeclareerd in sgcHTTP_JWT_MLDSA.

 

* De ML-DSA-algoritmen hebben het sgcCrypto-pack nodig. Zonder dat pack bestaan de enum-waarden nog steeds, zodat een formulier dat ermee is opgeslagen nog steeds laadt, maar ondertekenen geeft een fout en elk ML-DSA-token wordt geweigerd.

Componenten

 

 

 

* JWT-componenten vereisen minimaal Indy versie 10.6.0.5169 of sgcWebSockets Enterprise Edition.