JSON Web Jetonları (JWT)

Tink, web'de yaygın olarak kullanılan bir standart olan JWT'lerin üretilmesini ve doğrulanmasını destekler. Tink'in JWT uygulaması, RFC 7519'da tanımlanan JWT standardının bir alt kümesini sağlar. Tink ekibi bunu güvenli olarak kabul eder ve Tink kitaplığına uygundur.

Tink, standardın nadiren kullanılan veya doğru şekilde kullanılması zor bölümlerini desteklemez. Sınırlamalar şunlardır:

  • Tink yalnızca JWS Kompakt Serileştirme biçimini destekler. JWS JSON Serializasyonu ve JWE desteklenmez.
  • Tink, alg üstbilgisindeki None değerini desteklemiyor.
  • Tink yalnızca typ, alg ve kid başlıklarını destekler. Diğer üstbilgilerin hiçbiri desteklenmez.
  • Tink, imza veya MAC doğrulanmadan jetonların ayrıştırılmasına izin vermez.

JWT İmzaları

Jetonlar farklı varlıklar tarafından oluşturulup doğrulanıyorsa JwtPublicKeySign ve JwtPublicKeyVerify temel öğeleriyle asimetrik anahtarlar kullanmanız gerekir. Jetonları oluşturmak için özel anahtar, doğrulamada ise ortak anahtar 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çme

JWT imzaları, Tink'teki normal dijital imzadan farklı anahtar türleri kullanır. Bazı meta verilerin (alg ve kid gibi) anahtarla birlikte depolanması gerektiği için bu gereklidir.

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

Ortak anahtar kümesi dağıtımı

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

Tink, genel JWT anahtarlarının başka herhangi 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çermemesidir. Bu durum, bunların kullanımını hataya daha açık hale getirir ve anahtarların döndürülmesini zorlaştırabilir.

Ortak anahtar kümesinin yalnızca bir kez paylaşılması değil, aynı zamanda ortak anahtar kümesinin otomatik olarak güncellenmesinin bir yolunun sağlanması tercih edilir. (Aksi halde, yeni bir anahtara geçiş yapmak çok zordur.) Bu işlem genellikle ortak anahtar kümesini güvenilir ve güvenli bir URL'de yayınlayarak yapılır. Jetonları doğrulayan bir sunucunun daha sonra ortak anahtar kümesini bu URL'den periyodik olarak yeniden alması gerekir, örneğin günde bir kez. Anahtara rotasyon uygulamak için yeni ortak anahtarın, jetonları imzalamak için kullanılmadan en az bir gün önce ortak anahtar kümesine eklenmesi gerekir. Aksi takdirde, yeni özel anahtarla imzalanan yeni jetonlar, eski ortak anahtar kümesini kullanan sunucular tarafından reddedilir.

JWT MAC

Tink, JwtMac temelli simetrik anahtarlarla JWT'yi de destekler. Bu temel öğeyi yalnızca jetonlar aynı varlık tarafından oluşturulup doğrulanıyorsa kullanın. Bu temel öğe tarafından desteklenen algoritmalar HS256, HS384 ve HS512'dir.

Anahtar türü seçme

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