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

Tink hỗ trợ tạo và xác minh JWT, một tiêu chuẩn được sử dụng rộng rãi trên web. Quá trình 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 để sử dụng, và phù hợp với thư viện Tink.

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

  • Tink chỉ hỗ trợ định dạng Chuyển đổi tuần tự nhỏ gọn JWS. Không hỗ trợ chế độ Chuyển đổi tuần tự JSON JWSJWE.
  • 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 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 xác minh chữ ký hoặc MAC.

Chữ ký JWT

Nếu nhiều thực thể tạo và xác minh mã thông báo, thì bạn nên sử dụng các khoá bất đối xứng với các dữ liệu gố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. Các thuật toán được các dữ liệu gốc này hỗ trợ là: ES256, ES384, ES512, RS256, RS384, RS512, PS256, PS384PS512.

Chọn 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 dùng JWT_ES256 cho hầu hết các trường hợp sử dụng. Các 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. Đối với 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 tập hợp khoá công khai

Tink cho phép chuyển đổi tập hợp khoá công khai sang và từ định dạng Tập hợp JWK được xác định trong RFC 7517, điều này 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 alg và siêu dữ liệu kid được 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ễ gặp lỗi hơn và có thể gây khó khăn cho việc xoay vòng khoá.

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

MAC của JWT

Tink cũng hỗ trợ JWT với các phím đối xứng với JwtMac gốc. Chỉ sử dụng dữ liệu nguyên gốc 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 dữ liệu gốc này là HS256, HS384HS512.

Chọn 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 dùng JWT_HS256 cho hầu hết các trường hợp sử dụng.