Mã thông báo web JSON (JWT)

Tink hỗ trợ tạo và xác minh JWT, đây là một tiêu chuẩn được sử dụng rộng rãi trên web. Việc triển khai JWT của Tink cung cấp một tập hợp con của tiêu chuẩn JWT được xác định trong RFC 7519 mà nhóm Tink cho là an toàn khi sử dụng và phù hợp với thư viện Tink.

Tink không hỗ trợ những phần của tiêu chuẩn ít được sử dụng hoặc khó sử dụng đúng cách. Sau đây là những điểm hạn chế:

  • Tink chỉ hỗ trợ định dạng JWS Compact Serialization. JWS JSON SerializationJWE không được hỗ trợ.
  • Tink không hỗ trợ giá trị None trong tiêu đề alg.
  • Tink chỉ hỗ trợ các tiêu đề typ, algkid. Tất cả các tiêu đề khác đều không được hỗ trợ.
  • Tink không cho phép phân tích cú pháp mã thông báo trước khi chữ ký hoặc MAC được xác minh.

Chữ ký JWT

Nếu mã thông báo được tạo và xác minh bởi các thực thể khác nhau, thì bạn nên sử dụng các khoá bất đối xứng với các nguyên tắc JwtPublicKeySignJwtPublicKeyVerify. Khoá riêng tư được dùng để tạo mã thông báo và khoá công khai được dùng để xác minh mã thông báo. Thuật toán được các nguyên tắc này hỗ trợ là: ES256, ES384, ES512, RS256, RS384, RS512, PS256, PS384PS512.

Chọn một loại khoá

Chữ ký JWT sử dụng các loại khoá khác với chữ ký số thông thường trong Tink. Điều này là cần thiết vì một số siêu dữ liệu (chẳng hạn như algkid) cần được lưu trữ bằng khoá.

Bạn nên sử dụng JWT_ES256 cho hầu hết các trường hợp sử dụng. Mã thông báo được tạo bằng loại khoá này luôn có tiêu đề kid. Nếu bạn muốn mã thông báo ngắn hơn một chút mà không có tiêu đề kid, hãy chọn loại khoá JWT_ES256_RAW. Để biết tất cả các loại khoá được hỗ trợ, hãy xem phần Các loại khoá được hỗ trợ.

Phân phối bộ khoá công khai

Tink cho phép chuyển đổi các khoá công khai sang và từ định dạng JWK Sets được xác định trong RFC 7517 mà hầu hết các thư viện JWT đều hiểu.

Tink không hỗ trợ xuất khoá JWT công khai ở bất kỳ định dạng nào khác. Lý do là các định dạng khác không chứa siêu dữ liệu algkid để dùng trong quá trình xác minh. Điều này khiến việc sử dụng các định dạng đó dễ xảy ra lỗi hơn và có thể khiến việc xoay khoá trở nên khó khăn hơn.

Tốt nhất là bạn không chỉ chia sẻ bộ khoá công khai một lần mà còn cung cấp cách tự động cập nhật bộ khoá công khai. (Nếu không, việc xoay sang một khoá mới sẽ rất khó.) Việc này thường được thực hiện bằng cách xuất bản bộ khoá công khai trên một URL đáng tin cậy và bảo mật. Sau đó, máy chủ xác minh mã thông báo phải định kỳ tìm nạp lại bộ khoá công khai từ URL đó, ví dụ: mỗi ngày một lần. Để xoay khoá, bạn cần thêm khoá công khai mới vào bộ khoá công khai ít nhất một ngày trước khi khoá này được dùng để ký mã thông báo. Nếu không, các mã thông báo mới được ký bằng khoá riêng tư mới sẽ bị các máy chủ vẫn sử dụng bộ khoá công khai cũ từ chối.

JWT MAC

Tink cũng hỗ trợ JWT bằng các khoá đối xứng với nguyên thuỷ JwtMac. Chỉ sử dụng nguyên tắc cơ bản này nếu mã thông báo được tạo và xác minh bởi cùng một thực thể. Các thuật toán được hỗ trợ bởi nguyên tắc này là HS256, HS384HS512.

Chọn một loại khoá

Các loại khoá MAC JWT khác với các loại khoá MAC thông thường. Bạn nên sử dụng JWT_HS256 cho hầu hết các trường hợp sử dụng.

Ví dụ về các trường hợp sử dụng

Xem phần Tôi muốn tạo và xác minh JWT.