Tokeny sieciowe JSON (JWT)

Tink obsługuje generowanie i weryfikowanie tokenów JWT, które są powszechnie używanym standardem w internecie. Implementacja tokena JWT Tink udostępnia podzbiór standardu JWT zdefiniowany w RFC 7519, który zespół Tink uznaje za bezpieczny i który dobrze pasuje do biblioteki Tink.

Tink nie obsługuje części standardu, które są rzadko używane lub trudne w prawidłowym użyciu. Oto ograniczenia:

  • Tink obsługuje tylko format kompaktowej serializacji JWS. Serializacja JSON JWS i JWE nie są obsługiwane.
  • Tink nie obsługuje wartości None w nagłówku alg.
  • Tink obsługuje tylko nagłówki typ, alg i kid. Pozostałe nagłówki nie są obsługiwane.
  • Tink nie pozwala na analizę tokenów przed zweryfikowaniem podpisu lub adresu MAC.

Podpisy JWT

Jeśli tokeny są generowane i weryfikowane przez różne podmioty, z podstawowymi elementami JwtPublicKeySign i JwtPublicKeyVerify należy używać kluczy asymetrycznych. Klucz prywatny służy do generowania tokenów, a klucz publiczny do ich weryfikacji. Algorytmy obsługiwane przez te podstawowe modele to: ES256, ES384, ES512, RS256, RS384, RS512, PS256, PS384 i PS512.

Wybieranie typu klucza

Podpisy JWT używają innych typów kluczy niż normalny podpis cyfrowy w Tink. Jest to konieczne, ponieważ niektóre metadane (np. alg i kid) muszą być przechowywane w kluczu.

W większości przypadków zalecamy korzystanie z metody JWT_ES256. Tokeny wygenerowane za pomocą tego typu klucza zawsze mają nagłówek kid. Jeśli wolisz nieco krótsze tokeny bez nagłówka kid, wybierz typ klucza JWT_ES256_RAW. Informacje o wszystkich obsługiwanych typach kluczy znajdziesz w sekcji Obsługiwane typy kluczy.

Dystrybucja zestawu kluczy publicznych

Tink umożliwia konwertowanie publicznego zestawu kluczy na format JWK Sets zdefiniowany w RFC 7517, który jest zrozumiały dla większości bibliotek JWT.

Tink nie obsługuje eksportowania publicznych kluczy JWT w żadnym innym formacie. Powodem jest to, że inne formaty nie zawierają metadanych alg i kid, które mają być użyte podczas weryfikacji, co utrudnia ich użycie i utrudnia rotację kluczy.

Najlepiej nie udostępniać zestawu kluczy publicznego tylko raz, ale także automatycznie go aktualizować. Jeśli nie, zmiana na nowy klucz jest bardzo trudna. Często robi się to, publikując zestaw kluczy publicznych pod zaufanym i zabezpieczonym adresem URL. Serwer, który weryfikuje tokeny, musi okresowo ponownie pobierać publiczny zestaw kluczy z tego adresu URL – np. raz dziennie. Aby można było wykonać rotację klucza, nowy klucz publiczny musi zostać dodany do zestawu kluczy publicznych co najmniej 1 dzień przed jego użyciem do podpisywania tokenów. W przeciwnym razie nowe tokeny podpisane nowym kluczem prywatnym będą odrzucane przez serwery, które nadal używają starego zestawu kluczy publicznych.

Adres MAC JWT

Tink obsługuje też tokeny JWT z kluczami symetrycznymi w przypadku podstawowego elementu JwtMac. Używaj tego modelu podstawowego tylko wtedy, gdy tokeny są generowane i weryfikowane przez ten sam podmiot. Algorytmy obsługiwane przez ten element podstawowy to HS256, HS384 i HS512.

Wybieranie typu klucza

Typy kluczy MAC JWT różnią się od zwykłych kluczy MAC. W większości przypadków zalecamy korzystanie z JWT_HS256.