JSON Web Jetonları (JWT)

Tink, web'de yaygın olarak kullanılan bir standart olan JWT'lerin oluşturulmasını ve doğrulanmasını destekler. Tink'in JWT uygulaması, Tink ekibinin kullanımı güvenli bulduğu ve Tink kitaplığına iyi uyum sağlayan, RFC 7519'da tanımlanan JWT standardının bir alt kümesini sunar.

Tink, standardın nadiren kullanılan veya doğru şekilde kullanılması zor olan kısımlarını desteklemez. Sınırlamalar şunlardır:

  • Tink yalnızca JWS Compact Serialization biçimini destekler. JWS JSON Serialization ve JWE desteklenmez.
  • Tink, alg başlığındaki None değerini desteklemez.
  • Tink yalnızca typ, alg ve kid başlıklarını destekler. Diğer tüm başlıklar desteklenmez.
  • Tink, imza veya MAC doğrulanmadan önce jetonların ayrıştırılmasına izin vermez.

JWT İmzaları

Jetonlar farklı kuruluşlar tarafından oluşturulup doğrulanıyorsa JwtPublicKeySign ve JwtPublicKeyVerify temel öğeleriyle asimetrik anahtarlar kullanmanız gerekir. Özel anahtar, jeton oluşturmak için, ortak anahtar ise jetonları doğrulamak için kullanılır. Bu temel öğeler tarafından desteklenen algoritmalar şunlardır: ES256, ES384, ES512, RS256, RS384, RS512, PS256, PS384 ve PS512.

Anahtar türü seçin

JWT imzaları, Tink'teki normal dijital imzadan farklı anahtar türleri kullanır. Bunun nedeni, bazı meta verilerin (ör. alg ve kid) anahtarla birlikte saklanması gerekmesidir.

Çoğu kullanım alanı için JWT_ES256 kullanmanızı öneririz. Bu anahtar türüyle oluşturulan jetonlar her zaman kid üstbilgisine sahiptir. kid başlığı olmadan biraz daha kısa jetonlar tercih ediyorsanız JWT_ES256_RAW anahtar türünü seçin. Desteklenen tüm anahtar türleri için Desteklenen Anahtar Türleri başlıklı makaleyi inceleyin.

Ortak anahtar grubu dağıtımı

Tink, ortak anahtar kümelerinin RFC 7517'de tanımlanan ve çoğu JWT kitaplığının anladığı JWK kümeleri biçimine dönüştürülmesine ve bu biçimden dönüştürülmesine olanak tanır.

Tink, ortak JWT anahtarlarının başka bir biçimde dışa aktarılmasını desteklemez. Bunun nedeni, diğer biçimlerin doğrulamada kullanılacak alg ve kid meta verilerini içermemesi, bu nedenle bu biçimlerin kullanılmasının daha fazla hataya yol açması ve anahtarların döndürülmesini zorlaştırmasıdır.

Ortak anahtar kümesini yalnızca bir kez paylaşmak yerine, ortak anahtar kümesini otomatik olarak güncellemenin bir yolunu sağlamak tercih edilir. (Aksi takdirde, yeni bir anahtara geçiş yapmak çok zordur.) Bu işlem genellikle herkese açık anahtar kümesinin güvenilir ve güvenli bir URL'de yayınlanmasıyla yapılır. Jetonları doğrulayan bir sunucunun, ortak anahtar kümesini söz konusu URL'den düzenli olarak (ör. günde bir kez) yeniden getirmesi gerekir. Anahtarın döndürülmesi için yeni ortak anahtarın, jetonları imzalamak üzere kullanılmadan en az bir gün önce ortak anahtar kümesine eklenmesi gerekir. Aksi takdirde, yeni özel anahtarla imzalanan yeni jetonlar, eski genel anahtar kümesini kullanmaya devam eden sunucular tarafından reddedilir.

JWT MAC

Tink, JwtMac temel öğesiyle simetrik anahtarlarla JWT'yi de destekler. Bu öğeyi yalnızca jetonlar aynı tüzel kişi tarafından oluşturulup doğrulanıyorsa kullanın. Bu temel tarafından desteklenen algoritmalar HS256, HS384 ve HS512'dir.

Anahtar türü seçin

JWT MAC anahtar türleri, normal MAC anahtar türlerinden farklıdır. Çoğu kullanım alanı için JWT_HS256 kullanılmasını öneririz.

Örnek kullanım alanları

JWT oluşturmak ve doğrulamak istiyorum başlıklı makaleyi inceleyin.