آشنایی با گذرکلیدها

ویژگی‌های وب: اصالت‌سنجی وب

این راهنما جهت‌گیری با تراکم بالا و کنش‌محور برای پیاده‌سازی اصالت‌سنجی گذرکلید امن و مستقل از چارچوب و مدیریت اطلاعات کاربری در برنامه‌های وب مدرن ارائه می‌دهد.

۱. پیش‌نیازهای اصلی برای گذرکلیدها

گذرکلیدها به Web Authentication API (WebAuthn) متکی هستند که محدودیت‌های امنیتی متقاطع سخت‌گیرانه‌ای را اعمال می‌کند که باید قبل‌از هرگونه تلاش برای پیاده‌سازی برآورده شوند:

  • بافتارهای امن: روش‌های WebAuthn (‏navigator.credentials.create و navigator.credentials.get) به‌شدت پشت «بافتارهای امن» محدود شده‌اند. برنامه‌ها باید در https:// در تولید، یا http://localhost برای توسعه محلی اجرا شوند.
  • شناسه طرف اتکا (RP): هر اعتبارنامه به یک شناسه RP (اساساً نام دامنه برنامه) مرتبط است. شناسه RP ارسال‌شده در گزینه‌های سمت سرور باید با نام دامنه مبدأ فعلی مطابقت داشته باشد یا پسوند معتبری از آن باشد (برای مثال، example.com برای login.example.com معتبر است). عدم تطابق منجر به استثناهای SecurityError در سمت کارخواه می‌شود.

۲. هشدار تجربه کاربری AAGUID

«شناسه منحصربه‌فرد جهانی گواهی اصالت‌سنج» (AAGUID) یک شناسه ۱۲۸ بیتی است که در داده‌های گواهی ثبت برگردانده می‌شود و نشان‌دهنده مدل/ ارائه‌دهنده اصالت‌سنج است (برای مثال، «مدیر گذرواژه Google»،‏ iCloud Keychain،‏ 1Password).

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

۳. توصیه‌های کتابخانه جداشده

برای تولید گزینه‌های FIDO2/WebAuthn در پس‌زمینه و درستی‌سنجی امضا، توسعه‌دهندگان باید به‌جای رمزنگاری دستی، به کتابخانه‌های متن‌باز بررسی‌شده برای هر زبان تکیه کنند:

  • جاوا اسکریپت/ تایپ‌اسکریپت: SimpleWebAuthn (github.com/MasterKale/SimpleWebAuthn)
  • Python: py_webauthn (github.com/duo-labs/py_webauthn)
  • Java: Java WebAuthn Server (github.com/Yubico/java-webauthn-server)،‏ WebAuthn4J (github.com/webauthn4j/webauthn4j)
  • .NET: کتابخانه .NET برای FIDO2‏ (github.com/abergs/fido2-net-lib)
  • Go: کتابخانه Go برای WebAuthn‏ (github.com/go-webauthn/webauthn)
  • Ruby: WebAuthn Ruby (github.com/cedarcode/webauthn-ruby)
  • PHP: چارچوب WebAuthn‏ (github.com/web-auth/webauthn-framework)

۴. ماتریس مرجع مورد استفاده

مورد استفاده منطبق را در زیر شناسایی کنید و راهنمای پیاده‌سازی کامل آن را بازیابی کنید. هر مورد استفاده دارای میاناهای برنامه‌سازی کاربردی حیاتی (PublicKeyCredential.parseCreationOptionsFromJSON، parseRequestOptionsFromJSON، signalAllAcceptedCredentials، signalCurrentUserDetails، signalUnknownCredential، میانجی‌گری شرطی، مدیریت AAGUID، و غیره) است که فقط در راهنمای هر مورد استفاده مستند شده است. این مرحله بازیابی را رد نکنید و پوشاننده‌های کتابخانه شخص ثالث (مانند startAuthentication/startRegistration SimpleWebAuthn) را در کارخواه جایگزین نکنید — مستقیماً با میاناهای برنامه‌سازی کاربردی مرورگر WebAuthn بومی تماس بگیرید. توصیه‌های کتابخانه در بخش ۳ فقط برای سمت سرور (درستی‌سنجی FIDO2 در پس‌بست) اعمال می‌شود.

جزئیات پیاده‌سازی WebAuthn و گذرکلید خاص در راهنماهای زیر نگاشت شده است: