Pārbaudīt JWKS un izvilkt publiskās PEM atslēgas

pārbauda JWK Set (JSON Web Key Set) un izvelk katru publisko atslēgu PEM formātā, gatavu lietošanai JWT parakstu pārbaudei no identitātes nodrošinātāja (OIDC, Auth0, Keycloak…)
Ielīmējiet JWKS dokumenta pilnu saturu, piemēram, to, kas tiek pakļauts /.well-known/jwks.json.

Kas ir JWKS?

JWKS (JSON Web Key Set, RFC 7517) ir JSON dokuments, kas grupē publisko atslēgu saraksts strukturētā formā. To izmanto, lai publicētu JWT izsniedzēja atslēgas izmanto, lai parakstītu savus žetonus, lai ikviens patērētājs varētu tos savākt un pārbaudīt saņemto marķieru parakstu. Formāts vienmēr izskatās šādi:

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

Katrs ieraksts tabulā keys ir JWK (JSON Web Key), kas apraksta publisko atslēgu: atslēgas veids (kty), identifikators (bērns), lietojums paredzētais (izmantot), mērķa algoritms (alg) un kriptogrāfiskie komponenti.

Kad tiek izmantots JWKS?

JWKS ir mūsdienu OAuth2 un OpenID Connect arhitektūru mugurkauls. Tu saskarsies vairākos kontekstos:

  • OIDC atklāšana: jebkurš OpenID Connect pakalpojumu sniedzējs atklāj dokumentu konfigurācija vietnē /.well-known/openid-configuration, kurā ir lauks jwks_uri. Šajā URL ir JWKS, kurā ir uzskaitītas aktīvās publiskās atslēgas.
  • JWT verifikācija: kad jūsu API saņem pilnvaru, kas parakstīta RS256 vai ES256, tas nolasa galvenes bērns, lejupielādē raidītāja JWKS, atrod atslēgu atbilst, iegūst publisko atslēgu PEM formātā un pārbauda parakstu.
  • Atslēgas rotācija: izdevējs var publicēt vairākas atslēgas vienlaikus. kas ļauj ieviest jaunu atslēgu, lai parakstītu jaunos marķierus, saglabājot tos vecais, kas darbojas, kamēr beidzas apgrozībā esošo žetonu derīguma termiņš.
  • Federācijas: SAML, SCIM, savstarpēji saistīti pakalpojumi, JWKS publicēšana ļauj izvairīties no nepieciešamības manuāli apmainīties ar X.509 sertifikātiem starp partneriem.

JWK būtiskie lauki

Daži lauki sistemātiski parādās JWK. Šis rīks tos izvelk un parāda katrai analizētajai JWKS atslēgai:

  • bērns (atslēgas ID): unikāls atslēgas identifikators. Tā ir šī vērtība ko JWT galvene ievieto laukā kid, lai norādītu, kura JWKS atslēga ir jāizmanto verifikācijai.
  • kty (atslēgas veids): kriptogrāfijas saime. Abas vērtības dominējošās ir RSA (klasiskās RSA atslēgas, ko izmanto ar RS256, RS384, RS512) un EC (eliptiskas līknes, izmantotas ar ES256, ES384, ES512).
  • alg (algoritms): paraksta algoritms, kuram šī atslēga ir plānots. Neobligāts lauks, bet bieži aizpildīts. Ļauj ātri filtrēt atslēgas var izmantot konkrētam JWT.
  • izmantot: atslēgas lietošana. sig parakstam (case parasti), enc šifrēšanai (reti, tiek lietots kopā ar JWE).

Kāpēc pārveidot JWK par PEM?

Lielākā daļa klasisko kriptogrāfisko bibliotēku (OpenSSL, openssl_verify PHP, crypto Node.js, JCA Java) pieņem publiskās atslēgas šādā formātā PEM (Base64 ierāmēts ar -----BEGIN PUBLISKO ATSLĒGU-----), nevis tieši JWK formātā. Tāpēc JWK konvertēšana uz PEM ir būtiska:

  • Manuāli pārbaudiet JWT parakstu, izmantojot skriptu vai komandrindas rīku (jwt, jose, step crypto).
  • Importējiet atslēgu atkļūdošanas rīkā, piemēram, JWT Verifier kura laukā "publiskā atslēga" sagaida PEM atslēgu.
  • Saglabājiet atslēgu vietējā kešatmiņā vai konfigurācijas failā universālā formā un lasāms.
  • Ātri salīdziniet divas atslēgas (PEM formāts atvieglo vizuālās atšķirības).

Ierobežojumi un brīdinājumi

Šis rīks atbalsta RSA (kty=RSA) un EC publiskās atslēgas. (kty=EC līknēs P-256, P-384, P-521). Citi veidi (OKP priekš Ed25519, oct simetriskas atslēgas) netiek konvertētas: par tām tiek ziņots ar kļūdas ziņojumu ievade, pārējā JWKS daļa paliek lasāma.

  • Pārveidošana tiek veikta vienā virzienā: JWKS uz PEM. The Tas neattiecas uz JWK pārbūvi no esošas PEM atslēgas versija.
  • JWKS ir jāielīmē tāds, kāds tas ir kā JSON teksts. Atveseļošanās automātiski no URL jwks_uri vai OIDC galapunkta netiek darīts pusē serveri, lai izvairītos no negaidītiem izejošiem zvaniem.
  • Privātajām atslēgām nav jāparādās publiskā JWKS, un šis rīks neizņem nekā publiskie komponenti, pat ja bija privātā atslēga.

Kā to lietot

  1. Izgūstiet tā raidītāja JWKS, kuru vēlaties pārbaudīt. OIDC nodrošinātājam, adrese parasti ir https://example.com/.well-known/jwks.json vai https://example.com/oauth2/jwks.
  2. Kopēt visu JSON dokumentu (objektu, kas satur keys atslēgu).
  3. Ielīmējiet to rīka ievades lodziņā un sāciet analīzi.
  4. Katrai JWKS atslēgai rīks parāda savu bērnu, kty, tā alg, tā izmantošana un publiskā atslēga ir pārveidota PEM formātā.
  5. Noklikšķiniet uz "kopēt", lai izgūtu PEM un izmantotu to verifikācijas skriptā. mūsu JWT verificētājs vai jebkurā saderīgā rīkā OpenSSL.

Bieži uzdotie jautājumi

Kur es varu atrast OIDC nodrošinātāja JWKS?

Lielākā daļa OpenID Connect pakalpojumu sniedzēju publicē atklāšanas dokumentu https://example.com/.well-known/openid-configuration. Šis JSON satur lauku jwks_uri, kas norāda uz faktisko JWKS. Daži piegādātāji apkalpo tieši JWKS vietnē https://example.com/.well-known/jwks.json vai OAuth2 galapunktā veltīta. Lejupielādējiet saturu un ielīmējiet to šeit, kā tas ir.

Kāpēc bērns ir svarīgs?

bērns (atslēgas ID) ir identifikators, ko JWT galvene ievieto savā laukā. bērns, lai norādītu, kura JWKS atslēga jāizmanto verifikācijai. Bez šī identifikators, patērētājam būtu jāizmēģina katra JWKS atslēga, kas sarežģī diagnozi. kļūdas gadījums. Tāpēc tiek uzskatīts, ka katrā atslēgā ir bērns praktiski, un visi nopietni IDP tādu publicē.

Kāda ir atšķirība starp kty=RSA un kty=EC?

RSA ir vēsturiska asimetrisko parakstu saime, ko izmanto ar RS256, RS384, RS512. The atslēgas ir aprakstītas ar modulo n un eksponentu e. EC (eliptisks Līkne) ir jaunāka un sniedz īsākus parakstus līdzvērtīgam drošības līmenim. EC taustiņi ir aprakstīti ar vienu līkni (crv = P-256, P-384 vai P-521) un divām x un y koordinātas. Šis rīks pārvērš abas ģimenes par PEM.

Kā izmantot izvilkto PEM, lai verificētu JWT?

Kopējiet PEM un pēc tam ielīmējiet to mūsu laukā "publiskā atslēga". JWT verificētājs ar JWT, lai apstiprinātu. Jūs varat arī izmantojiet to no komandrindas ar openssl dgst, no Node.js ar crypto.verify, no Python ar kriptogrāfiju vai PyJWT, no Java ar JCA utt. PEM formāts ir vispāratzīts.

Manā JWKS ir Ed25519 (OKP) atslēga. Kāpēc tā nav konvertēta?

OKP atslēgu (Ed25519, Ed448, X25519, X448) konvertēšanai nepieciešama loģika specifisks un DER kodējums atšķiras no RSA un EC atslēgām. Šī rīka versija to nedara atbalsta tikai RSA un EC. Tiek ziņots par nepārvaldītām atslēgām atsevišķi ar kļūdas ziņojumu, nebloķējot citu JWKS ierakstu analīzi.

Vai mēs varam izgūt JWKS no URL, nevis ielīmēt to?

Ne šajā versijā. Rīks neveic nekādus izejošos HTTP zvanus, lai saglabātu ātrumu un izvairītos no tā lai darbotos kā netīšs starpnieks. Lejupielādējiet JWKS no pārlūkprogrammas vai ar izvelciet https://example.com/.well-known/jwks.json, pēc tam ielīmējiet saturu laukā ierakstu.

Pieprasījuma piemērs

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

Ievades shēma

Lauks Tips Obligāts Noklusējums
jwks text

Endpoint

  • GET https://cdrn.fr/api/v1/tools - uzskaita visus pieejamos rīkus
  • GET https://cdrn.fr/api/v1/tools/jwks-inspector - iegūst šī rīka shēmu
  • POST https://cdrn.fr/api/v1/tools/jwks-inspector/execute - izpilda šo rīku ar JSON payload