Patikrinti JWKS ir ištraukti viešuosius PEM raktus

tikrina JWK Set (JSON Web Key Set) ir ištraukia kiekvieną viešąjį raktą PEM formate, paruoštą naudojimui JWT parašų patikrai iš tapatybės teikėjo (OIDC, Auth0, Keycloak…)
Įklijuokite JWKS dokumento visą turinį, pavyzdžiui, tą, kuris yra rodomas /.well-known/jwks.json.

Kas yra JWKS?

JWKS (JSON žiniatinklio raktų rinkinys, RFC 7517) yra JSON dokumentas, sugrupuojantis viešųjų raktų sąrašas struktūrizuota forma. Jis naudojamas JWT leidėjo raktams paskelbti pasirašo savo žetonus, kad bet kuris vartotojas galėtų juos atsiimti ir patikrinkite gautų žetonų parašą. Formatas visada atrodo taip:

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

Kiekvienas įrašas lentelėje raktai yra JWK (JSON žiniatinklio raktas), kuris aprašo viešąjį raktą: rakto tipas (kty), identifikatorius (kid), naudojimas skirtas (naudoti), tikslinį algoritmą (alg) ir kriptografinius komponentus.

Kada naudojamas JWKS?

JWKS yra šiuolaikinės OAuth2 ir OpenID Connect architektūros pagrindas. Jūs susidurs keliuose kontekstuose:

  • OIDC atradimas: bet kuris „OpenID Connect“ teikėjas atskleidžia dokumentą konfigūracija adresu /.well-known/openid-configuration, kurioje yra laukas jwks_uri. Šiame URL yra JWKS, kuriame išvardyti aktyvūs viešieji raktai.
  • JWT patvirtinimas: kai jūsų API gauna prieigos raktą, pasirašytą RS256 arba ES256, nuskaito antraštės kid, atsisiunčia siųstuvo JWKS, randa raktą atitinka, išveda viešąjį raktą PEM formatu ir patikrina parašą.
  • Raktų kaitaliojimas: emitentas gali vienu metu paskelbti kelis raktus. kuri leidžia įvesti naują raktą, kad pasirašytumėte naujus žetonus išsaugant senasis naudojamas, o apyvartoje esančių žetonų galiojimo laikas baigiasi.
  • Federacijos: SAML, SCIM, tarpusavyje susijusios paslaugos, JWKS paskelbimas išvengiama rankinio keitimosi X.509 sertifikatais tarp partnerių.

Esminės JWK sritys

Kai kurie laukai sistemingai rodomi JWK. Šis įrankis juos ištraukia ir parodo kiekvienam analizuojamo JWKS raktui:

  • vaikas (rakto ID): unikalus rakto identifikatorius. Būtent ši vertė kurį JWT antraštė įdeda į vaikas lauką, kad nurodytų, kuris JWKS raktas turi būti naudojami patvirtinimui.
  • kty (rakto tipas): kriptografinė šeima. Dvi vertybės dominuojantys yra RSA (klasikiniai RSA raktai, naudojami su RS256, RS384, RS512) ir EC (elipsinės kreivės, naudojamos su ES256, ES384, ES512).
  • alg (algoritmas): parašo algoritmas, kuriam šis raktas planuojama. Neprivalomas laukas, bet dažnai užpildomas. Leidžia greitai filtruoti raktus galima naudoti tam tikram JWT.
  • naudoti: rakto naudojimas. sig parašui (atvejis įprastas), enc šifravimui (reta, naudojama su JWE).

Kodėl JWK konvertuoti į PEM?

Dauguma klasikinių kriptografinių bibliotekų (OpenSSL, openssl_verify PHP, crypto Node.js, JCA Java) priima viešuosius raktus tokiu formatu PEM (Base64, įrėminta -----BEGIN PUBLIC KEY-----), ne tiesiogiai JWK formatu. Todėl JWK konvertavimas į PEM yra būtinas:

  • Rankiniu būdu patikrinkite JWT parašą naudodami scenarijų arba komandinės eilutės įrankį (jwt, jose, step crypto).
  • Importuokite raktą į derinimo įrankį, pvz., JWT patvirtinimo priemonę kurios lauke „viešasis raktas“ tikisi PEM rakto.
  • Išsaugokite raktą vietinėje talpykloje arba konfigūracijos faile universalia forma ir skaitoma.
  • Greitai palyginkite du raktus (PEM formatas palengvina vizualinius skirtumus).

Apribojimai ir įspėjimai

Šis įrankis palaiko RSA (kty=RSA) ir EC viešuosius raktus (kty=EC kreivėse P-256, P-384, P-521). Kiti tipai (OKP, skirtas Ed25519, oct simetriniai raktai) nekonvertuojami: apie juos pranešama su klaidos pranešimu įvesties, likusi JWKS dalis lieka skaitoma.

  • Konvertavimas atliekamas viena kryptimi: JWKS į PEM. The JWK atkūrimas iš esamo PEM rakto netaikomas versija.
  • JWKS turi būti įklijuotas toks, koks yra kaip JSON tekstas. Atsigavimas automatinis iš URL jwks_uri arba OIDC galutinio taško nėra atliktas serverį, kad išvengtumėte netikėtų išeinančių skambučių.
  • Privatūs raktai neturi būti rodomi viešajame JWKS, ir šis įrankis neišskleidžia nei viešieji komponentai, net jei buvo privatus raktas.

Kaip juo naudotis

  1. Gaukite siųstuvo, kurį norite patikrinti, JWKS. OIDC teikėjui, adresas paprastai yra https://example.com/.well-known/jwks.json arba https://example.com/oauth2/jwks.
  2. Nukopijuokite visą JSON dokumentą (objektą, kuriame yra raktai raktas).
  3. Įklijuokite jį į įrankio įvesties laukelį ir pradėkite analizę.
  4. Kiekvienam JWKS raktui įrankis rodo jo kid, jo kty, jo alg, jo naudojimas ir viešasis raktas konvertuoti į PEM formatą.
  5. Spustelėkite „kopijuoti“, kad gautumėte PEM ir naudotumėte jį patvirtinimo scenarijuje, mūsų JWT patvirtinimo priemonėje arba bet kuriame suderinamame įrankyje OpenSSL.

Dažnai užduodami klausimai

Kur galiu rasti OIDC teikėjo JWKS?

Didžioji dauguma „OpenID Connect“ teikėjų skelbia atradimo dokumentą https://example.com/.well-known/openid-configuration. Šiame JSON yra laukas jwks_uri, kuris nurodo tikrąjį JWKS. Kai kurie tiekėjai aptarnauja tiesiogiai JWKS adresu https://example.com/.well-known/jwks.json arba „OAuth2“ galutiniame taške skirta. Atsisiųskite turinį ir įklijuokite jį čia tokį, koks yra.

Kodėl vaikas svarbus?

vaikas (rakto ID) yra identifikatorius, kurį JWT antraštė įdeda į savo lauką vaikas, kad nurodytumėte, kuris JWKS raktas turi būti naudojamas patvirtinimui. Be šito identifikatorius, vartotojas turėtų bandyti kiekvieną JWKS raktą, o tai apsunkina diagnozę klaidos atvejis. Todėl vaiko buvimas kiekviename rakte laikomas privalumu praktiška, o visi rimti IDP skelbia vieną.

Kuo skiriasi kty=RSA ir kty=EC?

RSA yra istorinė asimetrinių parašų šeima, naudojama su RS256, RS384, RS512. The raktai aprašomi modulo n ir eksponentu e. EC (elipsinis Kreivė) yra naujesnė ir suteikia trumpesnius parašus, kad būtų užtikrintas lygiavertis saugumo lygis. EC raktai apibūdinami viena kreive (crv = P-256, P-384 arba P-521) ir dviem x ir y koordinates. Šis įrankis konvertuoja abi šeimas į PEM.

Kaip naudoti ištrauktą PEM JWT patvirtinti?

Nukopijuokite PEM, tada įklijuokite jį į mūsų lauką „viešasis raktas“. JWT tikrintuvas su JWT patvirtinimui. Taip pat galite naudokite jį komandų eilutėje su openssl dgst, iš Node.js su crypto.verify, iš Python su kriptografija arba PyJWT, iš Java su JCA ir kt. PEM formatas yra visuotinai atpažįstamas.

Mano JWKS yra Ed25519 (OKP) raktas, kodėl jis nekonvertuotas?

OKP raktų (Ed25519, Ed448, X25519, X448) konvertavimui reikalinga logika specifinis ir DER kodavimas skiriasi nuo RSA ir EC raktų. Ši įrankio versija to nedaro palaiko tik RSA ir EC. Pranešama apie nevaldomus raktus atskirai su klaidos pranešimu, neblokuojant kitų JWKS įrašų analizės.

Ar galime gauti JWKS iš URL, o ne jį įklijuoti?

Ne šioje versijoje. Įrankis neatlieka jokių išeinančių HTTP skambučių, kad išliktų greitas ir išvengtų veikti kaip netyčinis įgaliotinis. Atsisiųskite JWKS iš savo naršyklės arba su suvyniokite https://example.com/.well-known/jwks.json, tada įklijuokite turinį į lauką įrašas.

Užklausos pavyzdys

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

Įvesties schema

Laukas Tipas Privalomas Numatytasis
jwks text

Galiniai taškai

  • GET https://cdrn.fr/api/v1/tools - išvardija visus galimus įrankius
  • GET https://cdrn.fr/api/v1/tools/jwks-inspector - gauna šio įrankio schemą
  • POST https://cdrn.fr/api/v1/tools/jwks-inspector/execute - vykdo šį įrankį su JSON payload