Kontrolli JWKS-i ja eralda avalikud PEM-võtmed

kontrollib JWK Set-i (JSON Web Key Set) ja eraldab iga avaliku võtme PEM-vormingus, valmis kasutamiseks JWT-allkirjade kontrollimiseks identiteedi pakkujalt (OIDC, Auth0, Keycloak…)
Kleebi JWKS-dokumendi täielik sisu, näiteks see, mis on saadaval aadressil /.well-known/jwks.json.

Mis on JWKS?

JWKS (JSON Web Key Set, RFC 7517) on JSON-dokument, mis koondab avalike võtmete loend struktureeritud kujul. Seda kasutatakse JWT väljaandja võtmete avaldamiseks kasutab oma žetoonide allkirjastamiseks, et iga tarbija saaks need kätte saada ja kontrollige saadud žetoonide allkirja. Formaat näeb alati välja selline:

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

Iga kirje tabelis võtmed on JWK (JSON Web Key), mis kirjeldab avalikku võtit: võtme tüüp (kty), identifikaator (laps), kasutus kavandatud (kasutus), sihtalgoritm (alg) ja krüptograafilised komponendid.

Millal JWKS-i kasutatakse?

JWKS on tänapäevaste OAuth2 ja OpenID Connecti arhitektuuride selgroog. Sina kohtab mitmes kontekstis:

  • OIDC Discovery: iga OpenID Connecti pakkuja avalikustab selle dokumendi konfiguratsioon aadressil /.well-known/openid-configuration, mis sisaldab välja jwks_uri. Sellel URL-il on JWKS, mis loetleb aktiivsed avalikud võtmed.
  • JWT-kinnitus: kui teie API saab RS256-sse või ES256-sse sisse logitud loa, see loeb päise kid, laadib alla saatja JWKS-i, leiab võtme vastab, tuletab avaliku võtme PEM-vormingus ja kontrollib allkirja.
  • Võtme vaheldumine: väljastaja saab avaldada mitu võtit korraga, mis võimaldab sisestada uue võtme, et allkirjastada uued märgid, säilitades samal ajal vana kasutuses, samal ajal kui ringluses olevad märgid aeguvad.
  • Liidud: SAML, SCIM, omavahel ühendatud teenused, JWKS-i avaldamine väldib X.509 sertifikaatide käsitsi vahetamist partnerite vahel.

JWK olulised väljad

Mõned väljad ilmuvad JWK-s süstemaatiliselt. See tööriist ekstraktib ja kuvab need iga analüüsitud JWKS-i võtme kohta:

  • laps (võtme ID): võtme kordumatu identifikaator. See on see väärtus mille JWT päis paneb väljale laps, et näidata, milline JWKS-i võti tuleb kasutada kontrollimiseks.
  • kty (võtmetüüp): krüptograafiline perekond. Kaks väärtust domineerivad on RSA (klassikalised RSA-võtmed, mida kasutatakse koos RS256, RS384, RS512) ja EC (elliptilised kõverad, kasutatakse koos ES256, ES384, ES512).
  • alg (algoritm): allkirjaalgoritm, mille jaoks see võti on planeeritud. Valikuline väli, kuid sageli täidetakse. Võimaldab võtmeid kiiresti filtreerida kasutatav antud JWT jaoks.
  • kasutus: võtme kasutamine. sig allkirja jaoks (case tavaline), enc krüptimiseks (harv, kasutatakse koos JWE-ga).

Miks teisendada JWK PEM-i?

Enamik klassikalisi krüptoteeke (OpenSSL, openssl_verify PHP, krüpto Node.js-s, JCA Javas) aktsepteerivad avalikke võtmeid vormingus PEM (Base64, raamitud -----BEGIN AVALIK VÕTI-----), mitte otse JWK formaadis. Seetõttu on JWK teisendamine PEM-iks hädavajalik:

  • Kinnitage JWT allkirja käsitsi skripti või käsurea tööriista abil (jwt, jose, step crypto).
  • Importige võti silumistööriista, nagu JWT Verifier mis ootab oma "avaliku võtme" väljale PEM-võtit.
  • Salvestage võti universaalsel kujul kohalikku vahemällu või konfiguratsioonifaili ja loetav.
  • Võrdle kiiresti kahte võtit (PEM-vorming hõlbustab visuaalseid erinevusi).

Piirangud ja hoiatused

See tööriist toetab RSA (kty=RSA) ja EC avalikke võtmeid (kty=EC kõveratel P-256, P-384, P-521). Muud tüübid (OKP jaoks Ed25519, oct jaoks sümmeetrilisi võtmeid) ei teisendata: neist teatatakse veateatega sisend, jääb ülejäänud JWKS loetavaks.

  • Teisendamine toimub ühes suunas: JWKS-st PEM-i. The see ei hõlma JWK ümberehitamist olemasolevast PEM-võtmest versioon.
  • JWKS tuleb kleepida nii nagu see on JSON-tekstina. Taastumine automaatne URL-ist jwks_uri või OIDC lõpp-punktist ei tehta server, et vältida ootamatuid väljuvaid kõnesid.
  • Privaatvõtmed ei peaks ilmuma avalikus JWKS-is ja see tööriist ei ekstrakti kui avalikud komponendid, isegi kui privaatvõti oli olemas.

Kuidas seda kasutada

  1. Tooge välja selle saatja JWKS, mida soovite kontrollida. OIDC pakkuja jaoks aadress on tavaliselt https://example.com/.well-known/jwks.json või https://example.com/oauth2/jwks.
  2. Kopeerige kogu JSON-dokument (võtit võtmeid sisaldav objekt).
  3. Kleepige see tööriista sisestuskasti ja alustage analüüsi.
  4. Iga JWKS-võtme puhul kuvab tööriist selle kid, selle kty, selle alg, selle kasutus ja avalik võti teisendati PEM-vormingusse.
  5. PEM-i toomiseks ja kinnitusskriptis kasutamiseks klõpsake käsul "Kopeeri". meie JWT kinnitaja või mis tahes ühilduvas tööriistas OpenSSL.

Korduma kippuvad küsimused

Kust ma leian OIDC pakkuja JWKS-i?

Valdav enamus OpenID Connecti pakkujatest avaldab avastusdokumendi https://example.com/.well-known/openid-configuration. See JSON sisaldab välja jwks_uri, mis osutab tegelikule JWKS-ile. Mõned tarnijad teenindavad otse JWKS saidil https://example.com/.well-known/jwks.json või OAuth2 lõpp-punktis pühendatud. Laadige sisu alla ja kleepige see siia.

Miks on laps oluline?

laps (võtme ID) on identifikaator, mille JWT päis oma väljale lisab laps, et näidata, millist JWKS-võtit tuleks kinnitamiseks kasutada. Ilma selleta identifikaatorit, peaks tarbija proovima iga JWKS-i võtit, mis muudab diagnoosimise keerulisemaks. vea juhtum. Seetõttu loetakse ühe võtme kohta lapse olemasolu heaks praktiline ja kõik tõsised IDP-d avaldavad selle.

Mis vahe on kty=RSA ja kty=EC vahel?

RSA on ajalooline asümmeetriliste signatuuride perekond, mida kasutatakse koos RS256, RS384, RS512. The võtmeid kirjeldavad moodul n ja astendaja e. EC (elliptiline Curve) on uuem ja annab samaväärse turvalisuse taseme jaoks lühemad allkirjad. EC-klahve kirjeldab üks kõver (crv = P-256, P-384 või P-521) ja kaks Koordinaadid x ja y. See tööriist teisendab mõlemad perekonnad PEM-iks.

Kuidas kasutada eraldatud PEM-i JWT kinnitamiseks?

Kopeerige PEM ja kleepige see meie väljale "avalik võti". JWT kinnitaja koos JWT-ga kinnitamiseks. Saate ka kasutage seda käsurealt käsuga openssl dgst, failist Node.js koos crypto.verify, Pythonist koos krüptograafiaga või PyJWT, Java-lt JCA-ga jne. PEM-vorming on üldiselt tunnustatud.

Minu JWKS sisaldab Ed25519 (OKP) võtit, miks seda ei teisendata?

Võtmete OKP (Ed25519, Ed448, X25519, X448) teisendamine nõuab loogikat spetsiifiline ja DER-kodeering, mis erineb RSA ja EC võtmete omast. See tööriista versioon seda ei tee toetab ainult RSA ja EC. Teatatakse haldamata võtmetest ükshaaval veateatega, blokeerimata teiste JWKS-i kirjete analüüsi.

Kas saame JWKS-i kleepimise asemel URL-ist hankida?

Selles versioonis mitte. Tööriist ei tee ühtegi väljaminevat HTTP-kõnet, et püsida kiire ja vältida tegutseda tahtmatu puhverserverina. Laadige JWKS alla oma brauserist või kasutades kõverdage https://example.com/.well-known/jwks.json ja seejärel kleepige sisu väljale sisenemine.

Päringunäide

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

Sisendskeem

Väli Tüüp Kohustuslik Vaikimisi
jwks text

Lõpp-punktid

  • GET https://cdrn.fr/api/v1/tools - loetleb kõik saadaolevad tööriistad
  • GET https://cdrn.fr/api/v1/tools/jwks-inspector - toob selle tööriista skeemi
  • POST https://cdrn.fr/api/v1/tools/jwks-inspector/execute - täidab selle tööriista JSON-payloadiga