Inspeziona JWKS u estraw iċ-ċwievet pubbliċi PEM

jinspeziona JWK Set (JSON Web Key Set) u jestraw kull ċavetta pubblika f'format PEM, lesta għall-użu biex tivverifika l-firem JWT minn fornitur ta' identità (OIDC, Auth0, Keycloak…)
Poġġi l-kontenut sħiħ ta' dokument JWKS, pereżempju dak espost fuq /.well-known/jwks.json.

X'inhu JWKS?

AJWKS (JSON Web Key Set, RFC 7517) huwa dokument JSON li jiġbor flimkien lista ta' ċwievet pubbliċi f'forma strutturata. Huwa użat biex jippubblika ċ-ċwievet li emittent JWT juża biex jiffirma t-tokens tiegħu, sabiex kull konsumatur ikun jista’ jiġborhom u jivverifika l-firma tat-tokens li jirċievi. Il-format dejjem jidher bħal dan:

{
  "ċwievet": [
    { "kty": "RSA", "kid": "abc123", "use": "sig", "alg": "RS256", "n": "...", "e": "AQAB"},
    { "kty": "EC", "kid": "def456", "use": "sig", "alg": "ES256", "crv": "P-256", "x": "...", "y": "..." }
  ]
}

Kull entrata fit-tabella keys hija JWK (JSON Web Key) li jiddeskrivi ċavetta pubblika: tip ta' ċavetta (kty), identifikatur (kid), użu maħsub (use), algoritmu fil-mira (alg) u komponenti kriptografiċi.

Meta jintuża JWKS?

Il-JWKS huwa s-sinsla tal-arkitetturi moderni OAuth2 u OpenID Connect. Inti se jiltaqgħu f'diversi kuntesti:

  • OIDC Discovery: kwalunkwe fornitur ta' OpenID Connect jesponi dokument ta' konfigurazzjoni f'/.well-known/openid-configuration li fih field jwks_uri. F'dan il-URL hemm JWKS li jelenka ċwievet pubbliċi attivi.
  • Verifika JWT: meta l-API tiegħek tirċievi token iffirmat f'RS256 jew ES256, jaqra l-kid tal-header, tniżżel il-JWKS tat-trasmettitur, isib iċ-ċavetta korrispondenti, joħroġ iċ-ċavetta pubblika fil-format PEM, u jivverifika l-firma.
  • Rotazzjoni taċ-ċwievet: emittent jista’ jippubblika diversi ċwievet fl-istess ħin, dan li jippermettilek tintroduċi ċavetta ġdida biex tiffirma t-tokens il-ġodda filwaqt li żżomm l-antik fis-servizz waqt li jiskadu t-tokens fiċ-ċirkolazzjoni.
  • Federazzjonijiet: SAML, SCIM, servizzi interkonnessi, pubblikazzjoni ta' JWKS jevita li jkollu jiskambja manwalment iċ-ċertifikati X.509 bejn l-imsieħba.

Oqsma essenzjali ta' JWK

Xi oqsma jidhru sistematikament f'JWK. Din l-għodda estratti u turihom għal kull ċavetta tal-JWKS analizzata:

  • kid (ID taċ-ċavetta): identifikatur uniku taċ-ċavetta. Huwa dan il-valur li l-header ta' JWT ipoġġi fil-qasam kid tiegħu biex jindika liema ċavetta tal-JWKS għandhom jintużaw għall-verifika.
  • kty (tip ta' ċavetta): familja kriptografika. Iż-żewġ valuri dominanti huma RSA (ċwievet RSA klassiċi, użati ma' RS256, RS384, RS512) u EC (kurvi ellittiċi, użati ma 'ES256, ES384, ES512).
  • alg (algoritmu): algoritmu tal-firma li għalih din iċ-ċavetta hija ppjanata. Qasam mhux obbligatorju iżda spiss jimtela. Jippermettilek tiffiltra ċ-ċwievet malajr użabbli għal JWT partikolari.
  • użu: użu taċ-ċavetta. sig għall-firma (każ tas-soltu), enc għall-kriptaġġ (rari, użat ma’ JWE).

Għaliex tikkonverti JWK għal PEM?

Il-maġġoranza tal-libreriji kriptografiċi klassiċi (OpenSSL, openssl_verify fi PHP, crypto f'Node.js, JCA f'Java) jaċċettaw ċwievet pubbliċi fil-format PEM (Base64 inkwadrat minn -----BEGIN PUBLIC KEY-----), mhux direttament fil-format JWK. Il-konverżjoni ta' JWK għal PEM hija għalhekk essenzjali għal:

  • Ivverifika manwalment il-firma ta' JWT minn skript jew għodda tal-linja tal-kmand (jwt, jose, pass crypto).
  • Importa ċ-ċavetta f'għodda ta' debug bħal JWT Verifier li jistenna ċavetta PEM fil-qasam tagħha "ċavetta pubblika".
  • Aħżen ċavetta f'cache lokali jew f'fajl ta' konfigurazzjoni f'forma universali u tinqara.
  • Qabbel malajr żewġ ċwievet (il-format PEM jiffaċilita d-differenzi viżwali).

Limitazzjonijiet u twissijiet

Din l-għodda tappoġġja RSA (kty=RSA) u ECċwievet pubbliċi (kty=EC fuq kurvi P-256, P-384, P-521). Tipi oħra (OKP għal Ed25519, oct għal ċwievet simmetriċi) mhumiex konvertiti: huma rrappurtati b'messaġġ ta 'żball minn input, il-bqija tal-JWKS jibqa' jinqara.

  • Il-konverżjoni ssir f'direzzjoni waħda: JWKS għal PEM. Il- il-bini mill-ġdid ta' JWK minn ċavetta PEM eżistenti mhuwiex kopert minn dan verżjoni.
  • Il-JWKS għandu jkun pejstjat kif inhu bħala test JSON. Irkupru awtomatiku minn URL jwks_uri jew endpoint OIDC ma jsirx server, biex jiġu evitati sejħiet ħerġin mhux mistennija.
  • Iċ-ċwievet privati m'għandhomx jidhru f'JWKS pubbliku, u din l-għodda ma tiġbedx minn komponenti pubbliċi anki jekk kienet preżenti ċavetta privata.

Kif tużah

  1. Irkupra l-JWKS tat-trasmettitur li trid tispezzjona. Għal fornitur OIDC, l-indirizz huwa normalment https://example.com/.well-known/jwks.json jew https://example.com/oauth2/jwks.
  2. Ikkopja d-dokument JSON kollu (l-oġġett li fih iċ-ċavetta keys).
  3. Pastha fil-kaxxa tad-dħul tal-għodda u ibda l-analiżi.
  4. Għal kull ċavetta JWKS, l-għodda turi l-kid tagħha, il-kty tagħha, alg, l-use tagħha u ċ-ċavetta pubblika kkonvertita għall-format PEM.
  5. Ikklikkja fuq "kopja" biex tirkupra l-PEM u użah fi skript ta' verifika, f' JWT Verifier tagħna, jew fi kwalunkwe għodda kompatibbli OpenSSL.

Mistoqsijiet frekwenti

Fejn nista' nsib il-JWKS ta' fornitur OIDC?

Il-maġġoranza l-kbira tal-fornituri tal-OpenID Connect jippubblikaw dokument ta 'skoperta fuq https://example.com/.well-known/openid-configuration. Dan il-JSON fih qasam jwks_uri li jindika l-JWKS attwali. Xi fornituri jservu direttament il-JWKS fuq https://example.com/.well-known/jwks.json jew fuq endpoint OAuth2 iddedikat. Niżżel il-kontenut u waħħalha hawn kif inhu.

Għaliex il-kid huwa importanti?

Il-kid (key ID) huwa l-identifikatur li l-header ta’ JWT ipoġġi fil-qasam tiegħu stess kid biex tindika liema ċavetta JWKS għandha tintuża għall-verifika. Mingħajr dan identifikatur, il-konsumatur ikollu jipprova kull ċavetta tal-JWKS, li tikkomplika d-dijanjosi billi każ ta’ żball. Il-preżenza ta' kid għal kull ċavetta hija għalhekk meqjusa bħala tajba prattiku, u l-IdPs serji kollha jippubblikaw wieħed.

X'inhi d-differenza bejn kty=RSA u kty=EC?

RSA hija l-familja storika ta 'firem asimmetriċi, użati ma' RS256, RS384, RS512. Il- ċwievet huma deskritti minn modulo n u esponent e. EC (Ellissi Curve) hija aktar riċenti u tagħti firem iqsar għal livell ekwivalenti ta’ sigurtà. Iċ-ċwievet EC huma deskritti b'kurva waħda (crv = P-256, P-384 jew P-521) u żewġ Koordinati x u y. Din l-għodda tikkonverti ż-żewġ familji f'PEM.

Kif tuża l-PEM estratt biex tivverifika JWT?

Ikkopja l-PEM, imbagħad waħħalha fil-qasam "ċavetta pubblika" ta 'tagħna JWT Verifikatur bil-JWT biex jivvalida. Tista 'wkoll użaha mil-linja tal-kmand b'openssl dgst, minn Node.js b' crypto.verify, minn Python bi kriptografija jew PyJWT, minn Java b'JCA, eċċ. Il-format PEM huwa rikonoxxut universalment.

JWKS tiegħi fih ċavetta Ed25519 (OKP), għaliex mhix konvertita?

Il-konverżjoni taċ-ċwievet OKP (Ed25519, Ed448, X25519, X448) teħtieġ loġika speċifika u kodifikazzjoni DER differenti minn dik taċ-ċwievet RSA u EC. Din il-verżjoni tal-għodda ma tagħmilx dan jappoġġja biss RSA u EC. Ċwievet mhux ġestiti huma rrappurtati individwalment b'messaġġ ta' żball, mingħajr ma timblokka l-analiżi ta' entrati oħra JWKS.

Nistgħu nirkupraw il-JWKS minn URL aktar milli nwaħħalha?

Mhux f'din il-verżjoni. L-għodda ma tagħmel l-ebda sejħiet HTTP ħerġin biex tibqa 'mgħaġġla u tevita li jaġixxi bħala prokura mhux intenzjonata. Niżżel il-JWKS mill-browser tiegħek jew ma' curl https://example.com/.well-known/jwks.json imbagħad waħħal il-kontenut fil-field dħul.

Eżempju ta' talba

curl -X POST https://cdrn.fr/api/v1/tools/jwks-inspector/execute \
  -H "Content-Type: application/json" \
  -d '{"jwks":"..."}'

Skema ta' input

Kamp Tip Meħtieġ Default
jwks text

Endpoints

  • GET https://cdrn.fr/api/v1/tools - telenka l-għodod kollha disponibbli
  • GET https://cdrn.fr/api/v1/tools/jwks-inspector - tikseb l-iskema ta' din l-għodda
  • POST https://cdrn.fr/api/v1/tools/jwks-inspector/execute - teżegwixxi din l-għodda b'payload JSON