การนำเข้าผู้ใช้งานโดยไม่ต้องรีเซ็ตรหัสผ่าน
คู่มือการย้ายระบบ Identity มักจะพูดเหมือนกันเสมอ พวกเขาบอกว่าผู้ใช้ต้องรีเซ็ตรหัสผ่าน แต่นี่ไม่ใช่กฎ แต่มันคือทางเลือก เครื่องมือส่วนใหญ่มักเลือกทางที่ง่ายแทนที่จะเป็นทางที่ถูกต้อง
คุณสามารถย้ายผู้ใช้งานได้โดยไม่ต้องรีเซ็ต เพียงแค่คุณต้องตรวจสอบ password hash ที่มีอยู่เดิม หากคุณมี hash เดิมและระบบใหม่ของคุณสามารถอ่านได้ การย้ายระบบก็จะราบรื่นโดยที่ผู้ใช้ไม่รู้สึกตัว
Password hash ไม่ใช่ความลับ Bcrypt ก็คือ bcrypt มันมี salt และ cost factor ในตัว ระบบใดก็ตามที่ใช้ bcrypt สามารถตรวจสอบมันได้ PBKDF2 ก็ทำงานในลักษณะเดียวกัน หากคุณมี hash คุณก็สามารถตรวจสอบรหัสผ่านเทียบกับ hash นั้นได้โดยไม่จำเป็นต้องรู้รหัสผ่านจริง
ใช้ lazy migration เพื่อประหยัดเวลา
- นำ hash เดิมไปยังระบบใหม่
- ตรวจสอบ hash เมื่อผู้ใช้เข้าสู่ระบบ
- เปลี่ยนเป็นรูปแบบใหม่ทันที
ภายในไม่กี่สัปดาห์ ฐานข้อมูลของคุณจะอัปเดตตัวเอง คุณจะไม่ต้องส่งอีเมลรีเซ็ตรหัสผ่านเลย และจะไม่มีตั๋วแจ้งปัญหา (support tickets) เข้ามาด้วย
แหล่งข้อมูลที่ต่างกันก็ให้รูปแบบที่ต่างกัน
Self-hosted Duende หรือ ASP.NET Identity: สิ่งเหล่านี้ใช้ V3 PBKDF2 หรือ bcrypt ระบบใหม่สามารถตรวจสอบและ rehash สิ่งเหล่านี้ได้อย่างง่ายดาย ซึ่งเป็นกระบวนการที่ราบรื่นและเป็นระเบียบ
Auth0: สิ่งเหล่านี้ใช้ bcrypt คุณสามารถนำเข้าได้โดยตรง อย่างไรก็ตาม คุณไม่สามารถดึงข้อมูลเหล่านี้ผ่าน API มาตรฐานได้ เนื่องจาก Auth0 ไม่ส่งคืน hash ผ่าน API เพื่อความปลอดภัย คุณต้องขอไฟล์ bulk export จากฝ่ายสนับสนุนของพวกเขา ไฟล์นี้จะมี bcrypt hashes อยู่ ให้ใช้ไฟล์นี้เพื่อให้การย้ายระบบเป็นไปอย่างราบรื่นโดยที่ผู้ใช้ไม่รู้สึกตัว
หากคุณไม่สามารถดึง hash มาได้ ผู้ใช้ก็จำเป็นต้องตั้งรหัสผ่านใหม่ นี่คือทางเลือกสุดท้ายที่จำเป็น อย่าปล่อยให้เครื่องมือบังคับให้คุณต้องรีเซ็ตรหัสผ่านหากคุณสามารถหลีกเลี่ยงได้
การบังคับรีเซ็ตรหัสผ่านก่อให้เกิดปัญหา:
- ทำให้ภาระงานของฝ่ายสนับสนุนสูงขึ้น
- เป็นการฝึกให้ผู้ใช้เชื่อถืออีเมล phishing
- เปลี่ยนการเปลี่ยนแปลงที่เงียบเชียบให้กลายเป็นปัญหาใหญ่
การย้ายระบบที่ดีควรทำให้รู้สึกเหมือนไม่มีอะไรเกิดขึ้น ลองถามดูก่อนว่าคุณสามารถขอ hash เดิมได้หรือไม่ ก่อนที่จะบอกให้ผู้ใช้รีเซ็ตรหัสผ่าน
Source: https://dev.to/authagonal/importing-users-without-a-password-reset-5h1j
