Nhiệm vụ: Cải thiện cơ chế xác thực MODX với các ngữ cảnh mgr/web

Cải thiện cơ chế xác thực MODX với các ngữ cảnh mgr/web

08.09.2026Kilfor.ru

Khắc phục việc kiểm tra xác thực MODX để tính toán chính xác trạng thái người dùng riêng biệt trong các ngữ cảnh mgr và web mà không phụ thuộc vào thực tế của một phiên làm việc chung.

Bối cảnh

Trong quá trình làm việc, một điểm quan trọng của việc xác thực MODX đã lộ diện: sau khi người dùng đăng nhập vào trang quản trị, trạng thái phiên làm việc của họ được thêm vào ngữ cảnh mgr. Nếu sau đó bạn kiểm tra xác thực cụ thể trong ngữ cảnh web, người dùng có thể không có mặt ở đó.

Đồng thời, không thể đơn giản coi người dùng là đã xác thực chỉ vì sự tồn tại của phiên làm việc MODX. Trong cùng một phiên PHP vật lý, MODX cho phép các định danh người dùng (identity) khác nhau cho các ngữ cảnh khác nhau. Nghĩa là, một phiên trình duyệt duy nhất có thể chứa, ví dụ, một người dùng trong mgr và một người dùng khác trong web.

Đây không phải là một lỗi cụ thể, mà là hệ quả từ kiến trúc MODX, nơi trạng thái xác thực (authentication state) gắn liền với từng ngữ cảnh (context-specific). Để giải thích chi tiết, hãy xem khái niệm:

https://modx.club/concepts/modx-pays-for-rarely-used-complexity

Vấn đề

Logic xác thực hiện tại có nguy cơ mắc một trong hai lỗi sau:

  1. Chỉ kiểm tra web và hiểu lầm rằng người dùng chưa xác thực, mặc dù họ đã đăng nhập vào Manager (mgr).
  2. Chỉ kiểm tra sự tồn tại của phiên làm việc MODX chung và tin tưởng nó một cách mù quáng mà không hiểu rõ người dùng nào thực sự được xác thực trong ngữ cảnh cần thiết.

Cả hai phương án đều không chính xác.

Mục tiêu

Làm cho việc kiểm tra xác thực MODX trở nên rõ ràng và an toàn: xem xét rõ ràng ngữ cảnh, contextToken thực tế và định danh người dùng (identity), thay vì suy luận trạng thái xác thực từ các dấu hiệu gián tiếp.

Những gì cần tìm hiểu

  • Chính xác cách MODX lưu trữ modx.user.contextTokens trong phiên bản hiện tại của dự án.
  • Cách mgr và web hoạt động khi những người dùng khác nhau đăng nhập liên tiếp trong cùng một phiên trình duyệt/PHP.
  • Những API nào của MODX trả về chính xác người dùng cho một ngữ cảnh cụ thể.
  • Điều gì xảy ra khi đăng xuất chỉ khỏi một ngữ cảnh.
  • Trạng thái phiên làm việc hoạt động thế nào sau khi cập nhật quyền/bộ nhớ đệm (permissions/cache) và đăng nhập lại.
  • Liệu ứng dụng có thực sự cần xác thực trong web, trong mgr, hay chỉ cần một ngữ cảnh đáng tin cậy được chọn rõ ràng là đủ.

Những việc cần làm

  • Loại bỏ logic coi người dùng là đã xác thực chỉ dựa trên sự tồn tại của phiên làm việc MODX.
  • Xác định rõ ràng ngữ cảnh nào nên được dùng để kiểm tra cho một kịch bản cụ thể.
  • Lấy định danh/token của người dùng đúng với ngữ cảnh cần thiết.
  • Nếu logic nghiệp vụ cho phép xác thực thông qua Manager, hãy xử lý rõ ràng mgr như một nguồn định danh hợp lệ riêng biệt thay vì cố gắng tìm cùng một người dùng trong web.
  • Không giả định rằng người dùng mgr và người dùng web trong cùng một phiên là giống nhau.
  • Nếu cần thiết, hãy thêm kiểm tra để đảm bảo id/định danh người dùng khớp với kịch bản dự kiến.
  • Xử lý chính xác việc thiếu token cho ngữ cảnh cần thiết.
  • Thêm hành vi chẩn đoán cho các trạng thái mơ hồ khi có các người dùng khác nhau xuất hiện trong cả mgr và web.

Các kịch bản cần kiểm tra

  1. Người dùng chỉ được xác thực trong mgr.
  2. Người dùng chỉ được xác thực trong web.
  3. Cùng một người dùng được xác thực ở cả mgr và web.
  4. Các người dùng khác nhau được xác thực trong mgr và web trong phạm vi cùng một phiên PHP.
  5. Người dùng đã đăng xuất khỏi web nhưng vẫn ở lại mgr.
  6. Người dùng đã đăng xuất khỏi mgr nhưng vẫn ở lại web.
  7. Có token cũ/không hợp lệ trong phiên làm việc.
  8. Sau khi đặt lại quyền/bộ nhớ đệm, trạng thái người dùng thay đổi hoặc yêu cầu đăng nhập lại.

Kết quả

Xác thực được xác định bởi trạng thái rõ ràng của ngữ cảnh MODX cần thiết và định danh người dùng cụ thể. Sự hiện diện của phiên trình duyệt/PHP chung không còn được coi là bằng chứng đủ để xác thực.

Tiêu chí hoàn thành

  • Việc kiểm tra phân biệt chính xác giữa mgr và web.
  • Hỗ trợ kịch bản khi người dùng Manager chỉ được xác thực trong mgr.
  • Không trộn lẫn các người dùng khác nhau giữa mgr và web.
  • Không tin tưởng phiên làm việc mà không kiểm tra định danh/token theo từng ngữ cảnh.
  • Tất cả các kịch bản được liệt kê đều được bao phủ bởi các bài kiểm tra hoặc quy trình kiểm tra có thể lặp lại.
  • Hành vi được tài liệu hóa để lập trình viên tiếp theo không coi phiên làm việc MODX là một trạng thái người dùng toàn cục duy nhất.

Tài liệu tham khảo kiến trúc

Trong MODX, ngữ cảnh không chỉ là một tập hợp các cài đặt mà còn là một phần của trạng thái bảo mật/xác thực. Trong một phiên vật lý duy nhất, modx.user.contextTokens có thể chứa các ID người dùng khác nhau cho mgr và web. Đây là một tính năng nền tảng của nền tảng, không phải là ngoại lệ của riêng dự án nào.

Nguồn: https://modx.club/concepts/modx-pays-for-rarely-used-complexity

Ворклоги

Giao diện cá nhân mới sử dụng hệ thống xác thực người dùng MODX hiện tại

Phiên bản production của giao diện cá nhân mới đã triển khai một kịch bản quan trọng cốt lõi: frontend mới hoạt động với thông tin xác thực hiện tại của người dùng MODX thay vì giới thiệu một hệ thống đăng nhập riêng biệt.

Người dùng đã đăng nhập trong hệ thống hiện tại có thể chuyển sang giao diện mới và tiếp tục làm việc với dữ liệu cũng như các yêu cầu của họ. Điều này đặc biệt quan trọng đối với việc ra mắt theo giai đoạn, vì giao diện cá nhân cũ và mới hiện đang chạy song song và nên được coi là hai lớp vỏ bọc cho cùng một tài khoản và một backend duy nhất.

Kết quả hiện tại xác nhận tính khả thi của sơ đồ tích hợp frontend mới với cơ chế xác thực/phiên làm việc (authentication/session) của MODX. Phần quản lý yêu cầu ra vào mới đã hoạt động dựa trên cơ chế xác thực này.

Đồng thời, nhiệm vụ riêng biệt là xử lý chính xác việc xác thực theo ngữ cảnh (mgr/web context-specific authentication) vẫn tiếp tục được đặt ra: việc tích hợp trên môi trường production sử dụng người dùng MODX hiện tại, nhưng các chi tiết tinh tế về token ngữ cảnh riêng biệt và trạng thái phiên làm việc không rõ ràng cần phải được hoàn thiện thành một sơ đồ hoàn toàn chuẩn hóa và đã được kiểm thử.