Tink는 웹에서 널리 사용되는 표준인 JWT 생성을 지원합니다. Tink의 JWT 구현은 Tink 팀에서 사용하기에 안전하고 Tink 라이브러리에 적합하다고 간주하는 RFC 7519에 정의된 JWT 표준의 하위 집합을 제공합니다.
Tink는 거의 사용되지 않거나 올바르게 사용하기 어려운 표준 부분을 지원하지 않습니다. 제한사항은 다음과 같습니다.
- Tink는 JWS 압축 직렬화 형식만 지원합니다. JWS JSON 직렬화 및 JWE는 지원되지 않습니다.
- Tink는
alg
헤더의None
값을 지원하지 않습니다. - Tink는
typ
,alg
,kid
헤더만 지원합니다. 다른 모든 헤더는 지원되지 않습니다. - Tink는 서명이나 MAC이 확인되기 전에 토큰을 파싱하는 것을 허용하지 않습니다.
JWT 서명
토큰이 서로 다른 항목에 의해 생성되고 확인되는 경우 JwtPublicKeySign
및 JwtPublicKeyVerify
기본 요소를 사용하여 비대칭 키를 사용해야 합니다.
비공개 키는 토큰을 생성하는 데 사용되고 공개 키는 토큰을 확인하는 데 사용됩니다. 이러한 기본 요소에서 지원하는 알고리즘은 ES256
, ES384
, ES512
, RS256
, RS384
, RS512
, PS256
, PS384
, PS512
입니다.
키 유형 선택
JWT 서명은 Tink의 일반 디지털 서명과 다른 키 유형을 사용합니다. 일부 메타데이터 (예: alg
및 kid
)는 키와 함께 저장해야 하므로 이 작업이 필요합니다.
대부분의 사용 사례에서는 JWT_ES256
를 사용하는 것이 좋습니다. 이 키 유형으로 생성된 토큰에는 항상 kid
헤더가 있습니다. kid
헤더가 없는 약간 짧은 토큰을 선호하는 경우 키 유형 JWT_ES256_RAW
을 선택합니다. 지원되는 모든 키 유형은 지원되는 키 유형을 참고하세요.
공개 키 세트 배포
Tink를 사용하면 공개 키 세트를 대부분의 JWT 라이브러리에서 이해하는 RFC 7517에 정의된 JWK 세트 형식으로 변환할 수 있습니다.
Tink는 다른 형식으로 공개 JWT 키를 내보내는 것을 지원하지 않습니다. 다른 형식에는 인증에 사용되는 alg
및 kid
메타데이터가 포함되어 있지 않기 때문에 오류가 발생하기 쉽고 키를 순환하기가 더 어려울 수 있습니다.
공개 키 세트를 한 번만 공유하는 것보다 공개 키 세트를 자동으로 업데이트하는 방법을 제공하는 것이 좋습니다. (그렇지 않으면 새 키로 순환하기가 매우 어렵습니다.) 이는 신뢰할 수 있고 보안이 유지되는 URL에 공개 키 세트를 게시하여 이루어지는 경우가 많습니다. 토큰을 확인하는 서버는 해당 URL에서 공개 키 세트를 주기적으로 다시 가져와야 합니다(예: 하루에 한 번). 키를 순환하려면 토큰에 서명하는 데 사용되기 하루 이상 전에 새 공개 키를 공개 키 세트에 추가해야 합니다. 그렇지 않으면 새 비공개 키로 서명된 새 토큰이 여전히 이전 공개 키 세트를 사용하는 서버에 의해 거부됩니다.
JWT MAC
Tink는 기본 요소 JwtMac
를 사용하여 대칭 키가 있는 JWT도 지원합니다. 토큰이 동일한 항목에 의해 생성되고 확인되는 경우에만 이 기본 요소를 사용하세요. 이 기본 요소에서 지원하는 알고리즘은 HS256
, HS384
, HS512
입니다.
키 유형 선택
JWT MAC 키 유형은 일반 MAC 키 유형과 다릅니다. 대부분의 사용 사례에서는 JWT_HS256
를 사용하는 것이 좋습니다.
사용 사례
JWT를 생성하고 확인하고 싶습니다를 참고하세요.