Inspektera ett JWKS och extrahera publika nycklar som PEM
- Panel
- Dokumentation
- API
Vad är ett JWKS?
Ett JWKS (JSON Web Key Set, RFC 7517) är ett JSON-dokument som samlar en lista över publika nycklar i strukturerad form. Det används för att publicera de nycklar som en JWT-utfärdare använder för att signera sina tokens, så att vilken konsument som helst kan hämta dem och verifiera signaturen på de tokens den tar emot. Formatet presenteras alltid så här:
{
"keys": [
{ "kty": "RSA", "kid": "abc123", "use": "sig", "alg": "RS256", "n": "...", "e": "AQAB" },
{ "kty": "EC", "kid": "def456", "use": "sig", "alg": "ES256", "crv": "P-256", "x": "...", "y": "..." }
]
}
Varje element i arrayen keys är en JWK (JSON Web Key) som
beskriver en publik nyckel: nyckeltyp (kty), identifierare (kid), avsedd
användning (use), målalgoritm (alg) och kryptografiska komponenter.
När används ett JWKS?
JWKS är ryggraden i moderna OAuth2- och OpenID Connect-arkitekturer. Du kommer att stöta på det i flera sammanhang:
- OIDC-discovery: varje OpenID Connect-leverantör exponerar ett konfigurations-
dokument på
/.well-known/openid-configurationsom innehåller ettjwks_uri-fält. På den URL:en finns ett JWKS som listar de aktiva publika nycklarna. - JWT-verifiering: när ditt API tar emot en token signerad i RS256 eller ES256,
läser det
kidi headern, laddar ner utfärdarens JWKS, hittar motsvarande nyckel, härleder den publika nyckeln i PEM-format och verifierar signaturen. - Nyckelrotation: en utfärdare kan publicera flera nycklar samtidigt, vilket gör det möjligt att införa en ny nyckel för att signera nya tokens samtidigt som den gamla behålls i tjänst medan cirkulerande tokens går ut.
- Federationer: SAML, SCIM, sammankopplade tjänster, publiceringen av ett JWKS slipper man behöva utbyta X.509-certifikat manuellt mellan partners.
Väsentliga fält i en JWK
Vissa fält återkommer systematiskt i en JWK. Det här verktyget extraherar och visar dem för varje nyckel i det analyserade JWKS:et:
kid(key ID): nyckelns unika identifierare. Det är det värde som headern på en JWT placerar i sittkid-fält för att ange vilken nyckel i JWKS:et som ska användas för verifieringen.kty(key type): kryptografisk familj. De två dominerande värdena ärRSA(klassiska RSA-nycklar, använda med RS256, RS384, RS512) ochEC(elliptiska kurvor, använda med ES256, ES384, ES512).alg(algorithm): signaturalgoritm som den här nyckeln är avsedd för. Frivilligt fält men ofta angivet. Tillåter snabb filtrering av nycklar som kan användas för en given JWT.use: nyckelns användning.sigför signatur (vanligt fall),encför kryptering (sällsynt, används med JWE).
Varför konvertera en JWK till PEM?
De flesta klassiska kryptografiska bibliotek (OpenSSL, openssl_verify i
PHP, crypto i Node.js, JCA i Java) accepterar publika nycklar i
PEM-format (Base64 omgärdad av -----BEGIN PUBLIC KEY-----), inte direkt
i JWK-format. Att konvertera en JWK till PEM är därför oumbärligt för att:
- Manuellt verifiera signaturen på en JWT från ett skript eller ett kommandoradsverktyg
(
jwt,jose,step crypto). - Importera nyckeln till ett debugverktyg som JWT Verifier som väntar sig en PEM-nyckel i sitt "publik nyckel"-fält.
- Lagra en nyckel i lokal cache eller en konfigurationsfil i en universell och läsbar form.
- Snabbt jämföra två nycklar (PEM-formatet underlättar visuella diffar).
Begränsningar och varningar
Det här verktyget stöder publika nycklar RSA (kty=RSA) och EC
(kty=EC på kurvorna P-256, P-384,
P-521). Andra typer (OKP för Ed25519, oct för
symmetriska nycklar) konverteras inte: de flaggas med ett felmeddelande per
post, resten av JWKS:et förblir läsbart.
- Konverteringen utförs i en enda riktning: JWKS till PEM. Att rekonstruera en JWK från en befintlig PEM-nyckel täcks inte av den här versionen.
- JWKS:et måste klistras in som det är i form av JSON-text. Automatisk hämtning
från en
jwks_uri-URL eller en OIDC-endpoint görs inte på serversidan, för att undvika oväntade utgående anrop. - Privata nycklar förväntas inte förekomma i ett publikt JWKS, och det här verktyget extraherar bara publika komponenter även om en privat nyckel skulle finnas.
Så använder du det
- Hämta JWKS:et för den utfärdare du vill inspektera. För en OIDC-leverantör är
adressen oftast
https://exemple.com/.well-known/jwks.jsonellerhttps://exemple.com/oauth2/jwks. - Kopiera hela JSON-dokumentet (objektet som innehåller nyckeln
keys). - Klistra in det i verktygets inmatningsfält och starta analysen.
- För varje nyckel i JWKS:et visar verktyget dess
kid,kty,alg,useoch den publika nyckeln konverterad till PEM-format. - Klicka på "kopiera" för att hämta PEM:en och använda den i ett verifieringsskript, i vår JWT Verifier, eller i något OpenSSL- kompatibelt verktyg.
Vanliga frågor
Var hittar man JWKS för en OIDC-leverantör?
Den absoluta majoriteten av OpenID Connect-leverantörer publicerar ett discovery-dokument på
https://exemple.com/.well-known/openid-configuration. Den JSON:en innehåller ett fält
jwks_uri som pekar på det faktiska JWKS:et. Vissa leverantörer serverar direkt
JWKS:et på https://exemple.com/.well-known/jwks.json eller på en dedikerad OAuth2-
endpoint. Ladda ner innehållet och klistra in det här som det är.
Varför är kid viktigt?
kid (key ID) är identifieraren som headern på en JWT placerar i sitt eget
kid-fält för att ange vilken nyckel i JWKS:et som ska användas för verifieringen. Utan den
identifieraren skulle konsumenten behöva prova varje nyckel i JWKS:et, vilket komplicerar diagnostiken
vid fel. Förekomsten av ett kid per nyckel anses därför vara god
praxis och alla seriösa IdP:er publicerar ett.
Vad är skillnaden mellan kty=RSA och kty=EC?
RSA är den historiska familjen av asymmetriska signaturer, använd med RS256, RS384, RS512.
Nycklarna beskrivs av en modulus n och en exponent e. EC (Elliptic
Curve) är nyare och ger kortare signaturer för motsvarande säkerhetsnivå.
EC-nycklar beskrivs av en kurva (crv = P-256, P-384 eller P-521) och två
koordinater x och y. Det här verktyget konverterar båda familjerna till PEM.
Hur använder man den extraherade PEM:en för att verifiera en JWT?
Kopiera PEM:en och klistra in den i fältet "publik nyckel" i vår
JWT Verifier med JWT:en att validera. Du kan också
använda den från kommandoraden med openssl dgst, från Node.js med
crypto.verify, från Python med cryptography eller
PyJWT, från Java med JCA osv. PEM-formatet är universellt erkänt.
Mitt JWKS innehåller en Ed25519-nyckel (OKP), varför konverteras den inte?
Konvertering av OKP-nycklar (Ed25519, Ed448, X25519, X448) kräver specifik logik
och en annan DER-kodning än för RSA- och EC-nycklar. Den här versionen av verktyget
stöder endast RSA och EC. Nycklar som inte hanteras flaggas
individuellt med ett felmeddelande, utan att blockera analysen av de andra posterna i JWKS:et.
Kan man hämta JWKS från en URL i stället för att klistra in det?
Inte i den här versionen. Verktyget gör inga utgående HTTP-anrop för att förbli snabbt och undvika
att agera som en ofrivillig proxy. Ladda ner JWKS:et från din webbläsare eller med
curl https://exemple.com/.well-known/jwks.json och klistra sedan in innehållet i
inmatningsfältet.
Exempelförfrågan
curl -X POST https://cdrn.fr/api/v1/tools/jwks-inspector/execute \
-H "Content-Type: application/json" \
-d '{"jwks":"..."}'
Indatasschema
| Fält | Typ | Obligatorisk | Standard |
|---|---|---|---|
jwks |
text | – |
Slutpunkter
GET https://cdrn.fr/api/v1/tools- listar alla tillgängliga verktygGET https://cdrn.fr/api/v1/tools/jwks-inspector- hämtar schemat för detta verktygPOST https://cdrn.fr/api/v1/tools/jwks-inspector/execute- kör detta verktyg med en JSON-payload