وارد کردن کاربران بدون بازنشانی رمز عبور
راهنماهای مهاجرت هویت همیشه یک چیز میگویند: کاربران باید رمز عبور خود را بازنشانی کنند. این یک قانون نیست، بلکه یک انتخاب است. اکثر ابزارها به جای مسیر درست، مسیر آسان را انتخاب میکنند.
شما میتوانید کاربران را بدون بازنشانی مهاجرت دهید. فقط کافی است هشهای (hashes) رمز عبور موجود را تأیید کنید. اگر هشهای قدیمی را داشته باشید و سیستم جدید شما بتواند آنها را بخواند، این انتقال نامحسوس باقی میماند.
هش رمز عبور یک راز نیست. Bcrypt همان Bcrypt است؛ این الگوریتم نمک (salt) و فاکتور هزینه (cost factor) مخصوص به خود را همراه دارد. هر سیستمی که از bcrypt استفاده کند میتواند آن را تأیید کند. PBKDF2 نیز به همین صورت عمل میکند. اگر هش را داشته باشید، میتوانید یک رمز عبور را بدون دانستن رمز اصلی، با آن مطابقت دهید.
برای صرفهجویی در زمان، از مهاجرت تنبل (lazy migration) استفاده کنید.
- هش قدیمی را به سیستم جدید منتقل کنید.
- هنگام ورود کاربر، هش را تأیید کنید.
- بلافاصله آن را با فرمت جدید جایگزین کنید.
طی چند هفته، پایگاه داده شما خودش را بهروزرسانی میکند. شما هیچ ایمیل بازنشانی رمز عبور و هیچ تیکت پشتیبانی دریافت نخواهید کرد.
منابع مختلف، فرمتهای متفاوتی ارائه میدهند.
Duende یا ASP.NET Identity خودمیزبانیشده (Self-hosted): اینها از V3 PBKDF2 یا bcrypt استفاده میکنند. سیستم جدید میتواند به راحتی اینها را تأیید و مجدداً هش (rehash) کند. این یک فرآیند تمیز و بینقص است.
Auth0: این سرویس از bcrypt استفاده میکند. میتوانید آنها را مستقیماً وارد کنید. با این حال، نمیتوانید آنها را از طریق یک API استاندارد دریافت کنید. Auth0 به دلیل مسائل امنیتی، هشها را از طریق API باز نمیگرداند. شما باید یک فایل خروجی انبوه (bulk export) از پشتیبانی آنها درخواست کنید. این فایل حاوی هشهای bcrypt است. از این فایل استفاده کنید تا مهاجرت را نامحسوس نگه دارید.
اگر نتوانستید هشها را دریافت کنید، کاربران باید رمز عبور جدیدی تعیین کنند. این یک راهکار جایگزین صادقانه است. اگر میتوانید از آن اجتناب کنید، اجازه ندهید یک ابزار شما را مجبور به بازنشانی کند.
بازنشانیهای اجباری باعث ایجاد مشکل میشوند:
- بار کاری پشتیبانی را بالا میبرند.
- کاربران را عادت میدهند که به ایمیلهای فیشینگ (phishing) اعتماد کنند.
- یک تغییر آرام را به یک مشکل پرسر و صدا تبدیل میکنند.
یک مهاجرت خوب باید طوری باشد که انگار هیچ اتفاقی نیفتاده است. قبل از اینکه به کاربران خود بگویید رمز عبورشان را بازنشانی کنند، بپرسید که آیا میتوانید هشهای قدیمی را دریافت کنید یا خیر.
منبع: https://dev.to/authagonal/importing-users-without-a-password-reset-5h1j
