Pregledati JWKS in izvleči javne ključe PEM

pregleda JWK Set (JSON Web Key Set) in izvleče vsak javni ključ v formatu PEM, pripravljen za uporabo za preverjanje JWT podpisov od ponudnika identitete (OIDC, Auth0, Keycloak…)
Prilepite celotno vsebino JWKS dokumenta, na primer tisto, ki je izpostavljena na /.well-known/jwks.json.

Kaj je JWKS?

JWKS (JSON Web Key Set, RFC 7517) je dokument JSON, ki združuje seznam javnih ključev v strukturirani obliki. Uporablja se za objavo ključev, ki jih izdajatelj JWT uporablja za podpisovanje svojih žetonov, tako da jih lahko vsak potrošnik prevzame in preveri podpis žetonov, ki jih prejme. Oblika je vedno videti takole:

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

Vsak vnos v tabeli keys je JWK (spletni ključ JSON), ki opisuje javni ključ: tip ključa (kty), identifikator (kid), uporaba predvideni (use), ciljni algoritem (alg) in kriptografske komponente.

Kdaj se uporablja JWKS?

JWKS je hrbtenica sodobnih arhitektur OAuth2 in OpenID Connect. Ti se bo srečal v več kontekstih:

  • OIDC Discovery: kateri koli ponudnik OpenID Connect razkrije dokument konfiguracija pri /.well-known/openid-configuration, ki vsebuje polje jwks_uri. Na tem URL-ju je JWKS, ki navaja aktivne javne ključe.
  • Preverjanje JWT: ko vaš API prejme žeton, podpisan v RS256 ali ES256, prebere kid glave, prenese JWKS oddajnika, najde ključ ustreza, izpelje javni ključ v formatu PEM in preveri podpis.
  • Rotacija ključev: izdajatelj lahko objavi več ključev hkrati, to ki vam omogoča, da uvedete nov ključ za podpisovanje novih žetonov in hkrati ohranite stari v uporabi, medtem ko žetoni v obtoku potečejo.
  • Zveze: SAML, SCIM, medsebojno povezane storitve, objava JWKS prepreči ročno izmenjavo potrdil X.509 med partnerji.

Bistvena polja JWK

Nekatera polja se sistematično pojavljajo v JWK. To orodje jih ekstrahira in prikaže za vsak analizirani ključ JWKS:

  • kid (ID ključa): enolični identifikator ključa. To je ta vrednost ki ga glava JWT postavi v svoje polje kid, da pokaže, kateri ključ JWKS je treba uporabiti za preverjanje.
  • kty (tip ključa): kriptografska družina. Dve vrednosti prevladujejo RSA (klasični ključi RSA, ki se uporabljajo z RS256, RS384, RS512) in EC (eliptične krivulje, uporabljene z ES256, ES384, ES512).
  • alg (algoritem): algoritem podpisa, za katerega je ta ključ je načrtovano. Izbirno polje, vendar pogosto izpolnjeno. Omogoča hitro filtriranje ključev uporaben za dani JWT.
  • use: uporaba ključa. sig za podpis (male in male črke običajno), enc za šifriranje (redko, uporablja se z JWE).

Zakaj pretvoriti JWK v PEM?

Večina klasičnih kriptografskih knjižnic (OpenSSL, openssl_verify v PHP, crypto v Node.js, JCA v Javi) sprejemajo javne ključe v obliki PEM (Base64 uokvirjeno s -----BEGIN PUBLIC KEY-----), ne neposredno v formatu JWK. Pretvarjanje JWK v PEM je torej nujno za:

  • Ročno preverite podpis JWT s skriptom ali orodjem ukazne vrstice (jwt, jose, step crypto).
  • Uvozite ključ v orodje za odpravljanje napak, kot je JWT Verifier ki pričakuje ključ PEM v svojem polju "javni ključ".
  • Shranite ključ v lokalni predpomnilnik ali v konfiguracijsko datoteko v univerzalni obliki in berljivo.
  • Hitro primerjajte dva ključa (format PEM omogoča vizualne razlike).

Omejitve in opozorila

To orodje podpira javne ključe RSA (kty=RSA) in EC (kty=EC na krivuljah P-256, P-384, P-521). Druge vrste (OKP za Ed25519, oct za simetrični ključi) niso pretvorjeni: o njih poročajo s sporočilom o napaki vnosa, preostali del JWKS ostane berljiv.

  • Pretvorba se izvede v eno smer: JWKS v PEM. The ponovna izdelava JWK iz obstoječega ključa PEM ni zajeta v tem različica.
  • JWKS je treba prilepiti, kot je kot besedilo JSON. Okrevanje samodejno iz URL-ja jwks_uri ali končne točke OIDC ni končano strežnik, da se izognete nepričakovanim odhodnim klicem.
  • Zasebni ključi se ne smejo pojavljati v javnem JWKS in to orodje ne ekstrahira kot javne komponente, tudi če je bil prisoten zasebni ključ.

Kako ga uporabljati

  1. Pridobite JWKS oddajnika, ki ga želite pregledati. Za ponudnika OIDC, naslov je običajno https://example.com/.well-known/jwks.json ali https://example.com/oauth2/jwks.
  2. Kopirajte celoten dokument JSON (predmet, ki vsebuje ključ keys).
  3. Prilepite ga v polje za vnos orodja in začnite analizo.
  4. Za vsak ključ JWKS orodje prikaže njegov kid, njegov kty, alg, njegova uporaba in javni ključ, pretvorjen v format PEM.
  5. Kliknite »kopiraj«, da pridobite PEM in ga uporabite v skriptu za preverjanje v naš JWT Verifier ali v katerem koli združljivem orodju OpenSSL.

Pogosta vprašanja

Kje lahko najdem JWKS ponudnika OIDC?

Velika večina ponudnikov OpenID Connect objavi dokument o odkritju na https://example.com/.well-known/openid-configuration. Ta JSON vsebuje polje jwks_uri, ki kaže na dejanski JWKS. Nekateri dobavitelji služijo neposredno JWKS na https://example.com/.well-known/jwks.json ali na končni točki OAuth2 posvečen. Prenesite vsebino in jo prilepite sem, kot je.

Zakaj je otrok pomemben?

kid (ID ključa) je identifikator, ki ga glava JWT postavi v svoje polje kid, da označite, kateri ključ JWKS naj se uporabi za preverjanje. Brez tega identifikatorja, bi moral potrošnik preizkusiti vsak ključ JWKS, kar oteži diagnozo primeru napake. Prisotnost otroka na ključ se torej šteje za dobro praktičen in vsi resni ponudniki identifikacije jih objavijo.

Kakšna je razlika med kty=RSA in kty=EC?

RSA je zgodovinska družina asimetričnih podpisov, ki se uporablja z RS256, RS384, RS512. The ključi so opisani z modulom n in eksponentom e. EC (eliptična Curve) je novejši in daje krajše podpise za enakovredno raven varnosti. EC ključi so opisani z eno krivuljo (crv = P-256, P-384 ali P-521) in dvema koordinate x in y. To orodje pretvori obe družini v PEM.

Kako uporabiti ekstrahiran PEM za preverjanje JWT?

Kopirajte PEM in ga prilepite v polje "javni ključ" našega JWT Verifier z JWT za preverjanje. Lahko tudi uporabite ga iz ukazne vrstice z openssl dgst, iz Node.js z crypto.verify, iz Pythona s kriptografijo oz PyJWT, iz Jave z JCA itd. Format PEM je splošno priznan.

Moj JWKS vsebuje ključ Ed25519 (OKP), zakaj ni pretvorjen?

Pretvorba ključev OKP (Ed25519, Ed448, X25519, X448) zahteva logiko specifično in kodiranje DER, ki se razlikuje od kodiranja RSA in EC ključev. Ta različica orodja ne podpira samo RSA in EC. Neupravljani ključi so prijavljeni posamično s sporočilom o napaki, ne da bi blokirali analizo drugih vnosov JWKS.

Ali lahko JWKS pridobimo iz URL-ja, namesto da ga prilepimo?

Ne v tej različici. Orodje ne izvaja nobenih odhodnih klicev HTTP, da bi ostalo hitro in se jim izognilo delovati kot nenamerni posrednik. Prenesite JWKS iz brskalnika ali s curl https://example.com/.well-known/jwks.json nato prilepite vsebino v polje vstop.

Primer zahteve

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

Vhodna shema

Polje Tip Obvezno Privzeto
jwks text

Končne točke

  • GET https://cdrn.fr/api/v1/tools - izpiše vsa razpoložljiva orodja
  • GET https://cdrn.fr/api/v1/tools/jwks-inspector - pridobi shemo tega orodja
  • POST https://cdrn.fr/api/v1/tools/jwks-inspector/execute - izvede to orodje s JSON payloadom