Nhập người dùng mà không cần đặt lại mật khẩu

Các hướng dẫn di chuyển danh tính luôn nói cùng một điều. Họ nói rằng người dùng phải đặt lại mật khẩu. Đây không phải là một quy tắc. Đó là một sự lựa chọn. Hầu hết các công cụ đều chọn con đường dễ dàng thay vì con đường đúng đắn.

Bạn có thể di chuyển người dùng mà không cần đặt lại mật khẩu. Bạn chỉ cần xác minh các mã băm mật khẩu (password hashes) hiện có. Nếu bạn có các mã băm cũ và hệ thống mới của bạn có thể đọc được chúng, quá trình chuyển đổi sẽ diễn ra một cách âm thầm.

Một mã băm mật khẩu không phải là một bí mật. Bcrypt là bcrypt. Nó mang theo salt (muối) và cost factor (hệ số chi phí) riêng. Bất kỳ hệ thống nào sử dụng bcrypt đều có thể xác minh nó. PBKDF2 cũng hoạt động theo cách tương tự. Nếu bạn có mã băm, bạn có thể kiểm tra mật khẩu dựa trên đó mà không cần biết mật khẩu thực tế.

Sử dụng di chuyển lười (lazy migration) để tiết kiệm thời gian.

  • Chuyển mã băm cũ sang hệ thống mới.
  • Xác minh mã băm khi người dùng đăng nhập.
  • Thay thế nó bằng định dạng mới ngay lập tức.

Qua vài tuần, cơ sở dữ liệu của bạn sẽ tự cập nhật. Bạn sẽ không nhận được email đặt lại mật khẩu nào và cũng không có yêu cầu hỗ trợ nào.

Các nguồn khác nhau cung cấp các định dạng khác nhau.

Duende tự lưu trữ (Self-hosted) hoặc ASP.NET Identity: Những hệ thống này sử dụng V3 PBKDF2 hoặc bcrypt. Hệ thống mới có thể xác minh và băm lại (rehash) chúng một cách dễ dàng. Đây là một quy trình gọn gàng.

Auth0: Những hệ thống này sử dụng bcrypt. Bạn có thể nhập chúng trực tiếp. Tuy nhiên, bạn không thể lấy chúng thông qua API tiêu chuẩn. Auth0 không trả về các mã băm qua API vì lý do bảo mật. Bạn phải yêu cầu một tệp xuất hàng loạt (bulk export file) từ bộ phận hỗ trợ của họ. Tệp này chứa các mã băm bcrypt. Hãy sử dụng tệp này để giữ cho quá trình di chuyển diễn ra âm thầm.

Nếu bạn không thể lấy được các mã băm, người dùng sẽ phải đặt mật khẩu mới. Đây là một phương án dự phòng trung thực. Đừng để một công cụ ép buộc bạn phải đặt lại mật khẩu nếu bạn có thể tránh được điều đó.

Việc ép buộc đặt lại mật khẩu gây ra các vấn đề:

  • Chúng tạo ra khối lượng công việc hỗ trợ lớn.
  • Chúng rèn luyện người dùng thói quen tin tưởng vào các email lừa đảo (phishing).
  • Chúng biến một thay đổi âm thầm thành một vấn đề ồn ào.

Một cuộc di chuyển tốt nên tạo cảm giác như không có chuyện gì xảy ra. Hãy hỏi xem bạn có thể lấy được các mã băm cũ hay không trước khi yêu cầu người dùng đặt lại mật khẩu.

Nguồn: https://dev.to/authagonal/importing-users-without-a-password-reset-5h1j