JSON Web Tokens (JWTs)

Tink از تولید و تأیید JWT ها پشتیبانی می کند، که یک استاندارد پرکاربرد در وب هستند. پیاده‌سازی JWT Tink زیرمجموعه‌ای از استاندارد JWT تعریف شده در RFC 7519 را ارائه می‌کند که تیم Tink استفاده از آن را ایمن می‌داند و به خوبی در کتابخانه Tink قرار می‌گیرد.

Tink از بخش‌هایی از استاندارد که به ندرت استفاده می‌شوند یا استفاده صحیح از آنها دشوار است، پشتیبانی نمی‌کند. اینها محدودیت ها هستند:

  • Tink فقط از فرمت JWS Compact Serialization پشتیبانی می کند. JWS JSON Serialization و JWE پشتیبانی نمی شوند.
  • Tink از مقدار None در هدر alg پشتیبانی نمی کند.
  • Tink فقط از هدرهای typ , alg و kid پشتیبانی می کند . همه سرصفحه های دیگر پشتیبانی نمی شوند.
  • Tink اجازه نمی دهد توکن ها قبل از تأیید امضا یا MAC تجزیه شوند.

امضاهای JWT

اگر توکن‌ها توسط موجودیت‌های مختلف تولید و تأیید می‌شوند، باید از کلیدهای نامتقارن با کلیدهای اولیه JwtPublicKeySign و JwtPublicKeyVerify استفاده کنید. کلید خصوصی برای تولید توکن ها و کلید عمومی برای تایید توکن ها استفاده می شود. الگوریتم های پشتیبانی شده توسط این الگوریتم های اولیه عبارتند از: ES256 ، ES384 ، ES512 ، RS256 ، RS384 ، RS512 ، PS256 ، PS384 و PS512 .

انتخاب نوع کلید

امضاهای JWT از انواع کلیدهای متفاوتی نسبت به امضای دیجیتال معمولی در Tink استفاده می کنند. این مورد نیاز است زیرا برخی از ابرداده ها (مانند alg و kid ) باید با کلید ذخیره شوند.

ما استفاده از JWT_ES256 را برای بیشتر موارد استفاده توصیه می کنیم. توکن‌هایی که با این نوع کلید تولید می‌شوند، همیشه یک هدر kid دارند. اگر توکن‌های کمی کوتاه‌تر را بدون هدر kid ترجیح می‌دهید، نوع کلید JWT_ES256_RAW را انتخاب کنید. برای همه انواع کلیدهای پشتیبانی شده، به انواع کلیدهای پشتیبانی شده مراجعه کنید.

توزیع مجموعه کلید عمومی

Tink به مجموعه کلیدهای عمومی اجازه می دهد تا به فرمت JWK Sets تعریف شده در RFC 7517 که اکثر کتابخانه های JWT آن را درک می کنند، تبدیل شود.

Tink از صادرات کلیدهای عمومی JWT در هر قالب دیگری پشتیبانی نمی کند. دلیل این امر این است که سایر قالب‌ها حاوی alg و متادیتای kid برای استفاده در تأیید نیستند، که استفاده از آنها را مستعد خطا می‌کند و ممکن است چرخش کلیدها را دشوارتر کند.

ترجیحاً نه تنها یک بار مجموعه کلیدهای عمومی را به اشتراک بگذارید، بلکه راهی برای به روز رسانی خودکار مجموعه کلیدهای عمومی ارائه دهید. (اگر نه، چرخش به یک کلید جدید بسیار سخت است.) این اغلب با انتشار مجموعه کلید عمومی در یک URL مطمئن و ایمن انجام می شود. سروری که توکن‌ها را تأیید می‌کند، باید به‌طور دوره‌ای مجموعه کلید عمومی را از آن URL، مثلاً یک بار در روز، دوباره واکشی کند. برای چرخاندن کلید، کلید عمومی جدید باید حداقل یک روز قبل از استفاده برای امضای نشانه ها به مجموعه کلیدهای عمومی اضافه شود. در غیر این صورت، توکن‌های جدید امضا شده با کلید خصوصی جدید توسط سرورهایی که هنوز از مجموعه کلید عمومی قدیمی استفاده می‌کنند رد می‌شوند.

JWT MAC

Tink همچنین از JWT با کلیدهای متقارن با JwtMac اولیه پشتیبانی می کند. فقط در صورتی از این اولیه استفاده کنید که توکن ها توسط یک موجودیت تولید و تأیید شوند. الگوریتم های پشتیبانی شده توسط این اولیه HS256 ، HS384 و HS512 هستند.

انتخاب نوع کلید

انواع کلید MAC JWT با انواع کلیدهای MAC معمولی متفاوت است. ما استفاده از JWT_HS256 را برای بیشتر موارد استفاده توصیه می کنیم.