Inspekcjonuj JWKS i wyodrębnij klucze publiczne w PEM
- Panel
- Dokumentacja
- API
Czym jest JWKS?
JWKS (JSON Web Key Set, RFC 7517) to dokument JSON, który gromadzi listę kluczy publicznych w ustrukturyzowanej formie. Służy do publikowania kluczy, których emitent JWT używa do podpisywania swoich tokenów, aby każdy konsument mógł je pobrać i zweryfikować podpis otrzymywanych tokenów. Format zawsze wygląda tak:
{
"keys": [
{ "kty": "RSA", "kid": "abc123", "use": "sig", "alg": "RS256", "n": "...", "e": "AQAB" },
{ "kty": "EC", "kid": "def456", "use": "sig", "alg": "ES256", "crv": "P-256", "x": "...", "y": "..." }
]
}
Każda pozycja tablicy keys to JWK (JSON Web Key), która
opisuje klucz publiczny: typ klucza (kty), identyfikator (kid),
przewidziane użycie (use), docelowy algorytm (alg) i komponenty
kryptograficzne.
Kiedy używać JWKS?
JWKS to kręgosłup nowoczesnych architektur OAuth2 i OpenID Connect. Spotkasz go w kilku kontekstach:
- Odkrywanie OIDC: każdy dostawca OpenID Connect udostępnia dokument konfiguracji
pod
/.well-known/openid-configuration, który zawiera polejwks_uri. Pod tym URL znajduje się JWKS z aktywnymi kluczami publicznymi. - Weryfikacja JWT: gdy twoje API otrzymuje token podpisany w RS256 lub ES256,
odczytuje
kidnagłówka, pobiera JWKS emitenta, znajduje odpowiedni klucz, wydobywa z niego klucz publiczny w formacie PEM i weryfikuje podpis. - Rotacja kluczy: emitent może równolegle publikować kilka kluczy, co pozwala wprowadzić nowy klucz do podpisywania nowych tokenów, jednocześnie zachowując stary w służbie do czasu wygaśnięcia tokenów w obiegu.
- Federacje: SAML, SCIM, połączone usługi, publikacja JWKS pozwala uniknąć ręcznej wymiany certyfikatów X.509 między partnerami.
Kluczowe pola JWK
Kilka pól systematycznie pojawia się w JWK. To narzędzie wyodrębnia je i wyświetla dla każdego klucza analizowanego JWKS:
kid(key ID): unikalny identyfikator klucza. To ta wartość, którą nagłówek JWT umieszcza w swoim polukid, aby wskazać, który klucz z JWKS powinien być użyty do weryfikacji.kty(key type): rodzina kryptograficzna. Dwie dominujące wartości toRSA(klasyczne klucze RSA, używane z RS256, RS384, RS512) iEC(krzywe eliptyczne, używane z ES256, ES384, ES512).alg(algorithm): algorytm podpisu, dla którego ten klucz jest przewidziany. Pole opcjonalne, ale często wypełnione. Pozwala szybko filtrować klucze przydatne dla danego JWT.use: użycie klucza.sigdla podpisu (zwykły przypadek),encdla szyfrowania (rzadkie, używane z JWE).
Dlaczego konwertować JWK na PEM?
Większość klasycznych bibliotek kryptograficznych (OpenSSL, openssl_verify w PHP,
crypto w Node.js, JCA w Javie) akceptuje klucze publiczne w formacie PEM
(Base64 otoczony przez -----BEGIN PUBLIC KEY-----), a nie bezpośrednio w formacie JWK.
Konwersja JWK na PEM jest więc niezbędna do:
- Ręcznej weryfikacji podpisu JWT ze skryptu lub narzędzia wiersza poleceń
(
jwt,jose,step crypto). - Importu klucza do narzędzia debugującego, takiego jak JWT Verifier, które oczekuje klucza PEM w polu „klucz publiczny".
- Przechowywania klucza w lokalnej pamięci podręcznej lub pliku konfiguracyjnym w uniwersalnej i czytelnej formie.
- Szybkiego porównywania dwóch kluczy (format PEM ułatwia wizualne diffy).
Ograniczenia i ostrzeżenia
To narzędzie obsługuje klucze publiczne RSA (kty=RSA) i EC
(kty=EC na krzywych P-256, P-384, P-521).
Inne typy (OKP dla Ed25519, oct dla kluczy symetrycznych) nie są
konwertowane: są sygnalizowane komunikatem błędu dla każdej pozycji, reszta JWKS pozostaje
czytelna.
- Konwersja odbywa się w jednym kierunku: JWKS na PEM. Odtworzenie JWK z istniejącego klucza PEM nie jest objęte tą wersją.
- JWKS musi być wklejony bez zmian jako tekst JSON. Automatyczne pobieranie
z URL
jwks_urilub endpointu OIDC nie jest wykonywane po stronie serwera, aby uniknąć nieprzewidzianych wywołań wychodzących. - Klucze prywatne nie powinny pojawiać się w publicznym JWKS, a to narzędzie wyodrębnia tylko komponenty publiczne, nawet jeśli klucz prywatny byłby obecny.
Jak korzystać
- Pobierz JWKS emitenta, którego chcesz zbadać. Dla dostawcy OIDC adres to zazwyczaj
https://exemple.com/.well-known/jwks.jsonlubhttps://exemple.com/oauth2/jwks. - Skopiuj cały dokument JSON (obiekt zawierający klucz
keys). - Wklej go w polu wprowadzania narzędzia i uruchom analizę.
- Dla każdego klucza JWKS narzędzie wyświetla jego
kid,kty,alg,usei klucz publiczny przekonwertowany na format PEM. - Kliknij „kopiuj", aby pobrać PEM i użyć go w skrypcie weryfikacyjnym, naszym JWT Verifier lub dowolnym narzędziu zgodnym z OpenSSL.
Najczęściej zadawane pytania
Gdzie znaleźć JWKS dostawcy OIDC?
Zdecydowana większość dostawców OpenID Connect publikuje dokument odkrywania pod
https://exemple.com/.well-known/openid-configuration. Ten JSON zawiera pole
jwks_uri, które wskazuje na efektywny JWKS. Niektórzy dostawcy serwują JWKS
bezpośrednio pod https://exemple.com/.well-known/jwks.json lub na dedykowanym
endpoincie OAuth2. Pobierz zawartość i wklej ją tutaj bez zmian.
Dlaczego kid jest ważny?
kid (key ID) to identyfikator, który nagłówek JWT umieszcza w swoim własnym polu
kid, aby wskazać, który klucz z JWKS powinien być użyty do weryfikacji. Bez tego
identyfikatora konsument musiałby próbować każdego klucza JWKS, co komplikuje diagnostykę
w razie błędu. Obecność kid na klucz jest więc uważana za dobrą praktykę, a wszyscy
poważni IdP go publikują.
Jaka jest różnica między kty=RSA a kty=EC?
RSA to historyczna rodzina asymetrycznych podpisów, używana z RS256, RS384, RS512. Klucze są
opisane modulo n i wykładnikiem e. EC (Elliptic Curve) jest nowszy
i daje krótsze podpisy dla równoważnego poziomu bezpieczeństwa. Klucze EC są opisane krzywą
(crv = P-256, P-384 lub P-521) i dwoma współrzędnymi x i y.
To narzędzie konwertuje obie rodziny na PEM.
Jak użyć wyodrębnionego PEM do weryfikacji JWT?
Skopiuj PEM, a następnie wklej go w polu „klucz publiczny" naszego
JWT Verifier wraz z JWT do zwalidowania. Możesz też użyć go
z wiersza poleceń za pomocą openssl dgst, z Node.js za pomocą
crypto.verify, z Pythona za pomocą cryptography lub PyJWT,
z Javy za pomocą JCA itd. Format PEM jest powszechnie rozpoznawany.
Mój JWKS zawiera klucz Ed25519 (OKP), dlaczego nie jest konwertowany?
Konwersja kluczy OKP (Ed25519, Ed448, X25519, X448) wymaga specyficznej logiki
i innego kodowania DER niż klucze RSA i EC. Ta wersja narzędzia obsługuje tylko RSA
i EC. Nieobsługiwane klucze są sygnalizowane indywidualnie komunikatem błędu,
bez blokowania analizy pozostałych pozycji JWKS.
Czy można pobrać JWKS z URL zamiast go wklejać?
Nie w tej wersji. Narzędzie nie wykonuje żadnego wywołania HTTP wychodzącego, aby pozostać
szybkim i uniknąć działania jako niezamierzony proxy. Pobierz JWKS z przeglądarki lub za
pomocą curl https://exemple.com/.well-known/jwks.json, a następnie wklej zawartość
w polu wprowadzania.
Przykładowe zapytanie
curl -X POST https://cdrn.fr/api/v1/tools/jwks-inspector/execute \
-H "Content-Type: application/json" \
-d '{"jwks":"..."}'
Schemat wejściowy
| Pole | Typ | Wymagane | Domyślnie |
|---|---|---|---|
jwks |
text | – |
Punkty końcowe
GET https://cdrn.fr/api/v1/tools- lista wszystkich dostępnych narzędziGET https://cdrn.fr/api/v1/tools/jwks-inspector- zwraca schemat dla tego narzędziaPOST https://cdrn.fr/api/v1/tools/jwks-inspector/execute- uruchamia to narzędzie z payloadem JSON