JSON Web Tokens (JWTs)

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

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

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

JWTها با امضاها

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

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

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

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

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

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

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

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

موارد استفاده مثال

ببینید، من می‌خواهم JWTهایی با امضا ایجاد و تأیید کنم .

JWTها با MACها

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

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

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