Trong JWT (JSON Web Token), có hai loại chữ ký số: chữ ký số độc lập (HS256, HS384, HS512) và chữ ký số công cộng / riêng tư (RS256, RS384, RS512).

Chữ ký số độc lập (HMAC): Đối với chữ ký số độc lập, chỉ có một khóa được sử dụng để ký và xác minh token. Điều này được gọi là “chữ ký đối xứng” vì cùng một khóa được sử dụng cả cho việc ký và xác minh. Trong thư viện JWT của Firebase, bạn sẽ sử dụng JWT::encode và JWT::decode với một khóa (ví dụ: JWT::encode($payload, $key)).
Chữ ký số công cộng / riêng tư (RSA): Đối với chữ ký số RSA, một cặp khóa công cộng và riêng tư được sử dụng. Khóa riêng tư được sử dụng để ký token, trong khi khóa công cộng được sử dụng để xác minh. Điều này cho phép phía người gửi ký token và phía nhận xác minh token mà không cần chia sẻ cùng một khóa bí mật. Trong thư viện JWT của Firebase, bạn sẽ sử dụng JWT::encode với khóa riêng tư để ký token và sử dụng JWT::decode với khóa công cộng để xác minh token.
Trong một hệ thống xác thực dựa trên JWT, bạn có thể sử dụng cả hai loại chữ ký số tùy thuộc vào yêu cầu cụ thể của bạn. Tuy nhiên, đối với các trường hợp đặc biệt như việc triển khai Single Sign-On (SSO) hoặc các tình huống mà bạn cần chia sẻ khóa giữa các ứng dụng khác nhau, sử dụng chữ ký số RSA có thể là lựa chọn phù hợp hơn.
Thư viện tại Github