- Thuật ngữ "auth" mang hai nghĩa: xác thực (authentication) và phân quyền (authorization)
- Điều này gây ra sự nhầm lẫn trong tên thư viện hoặc package
- Các thuật ngữ "authn" và "authz" không rõ ràng và khó hiểu
Sự khác biệt giữa xác thực và phân quyền
- Xác thực (authentication): quá trình xác minh người dùng là ai
- Phân quyền (authorization): quá trình quyết định người dùng có thể làm gì
- Hai khái niệm này khác nhau, và giải quyết một cái không có nghĩa là cái kia cũng được giải quyết
Đề xuất dùng "permissions" và "login"
- Đề xuất phân biệt rõ xác thực là "login", còn phân quyền là "permissions"
- "login" có thể được dùng ở cả dạng danh từ và động từ
- Danh từ: thông tin được nhập để truy cập hệ thống
- Động từ: hành động đăng nhập để sử dụng hệ thống
- "permissions" được dùng ở dạng danh từ, còn dạng động từ thì dùng "check permissions"
Lợi ích của việc dùng thuật ngữ rõ ràng
- Ngay cả những người ngoài ngành kỹ sư phần mềm cũng có thể dễ dàng hiểu được
- Cho phép tạo ra các tầng trừu tượng tốt hơn
- Có thể thiết kế bằng cách tách xác thực và phân quyền thành các mô-đun riêng biệt
Ý kiến của GN⁺
- Tầm quan trọng của việc dùng thuật ngữ rõ ràng: Khi thuật ngữ rõ ràng, việc giao tiếp trở nên trôi chảy hơn và có thể giảm hiểu lầm.
- Lợi ích của trừu tượng hóa: Tách xác thực và phân quyền giúp thiết kế hệ thống linh hoạt hơn và dễ bảo trì hơn.
- Ví dụ về việc dùng thuật ngữ khác: Ngoài "login" và "permissions", các thuật ngữ như "access control" cũng đáng để cân nhắc.
- Điều cần lưu ý khi áp dụng thuật ngữ: Khi đưa thuật ngữ mới vào, cần có đủ thảo luận và sự đồng thuận trong nhóm.
- Gợi ý dự án liên quan: Những dự án tiêu biểu tách riêng xác thực và phân quyền có OAuth và OpenID Connect.
8 bình luận
Giữa các lập trình viên, tôi thấy có thể đồng ý với việc dùng
authn,authzthay vìauth, còn trong tài liệu hoặc controller/facade có điểm chạm với người dùng thì dùnglogin,permission. Tuy vậy, nếu đến mức muốn bỏ cảauthn,authzthì tôi không chắc có cần làm vậy không.Đúng như bài viết đã chỉ ra, việc dùng
authvới nghĩa mơ hồ giữa xác thực và phân quyền đúng là từng gây khá nhiều nhầm lẫn. Có vẻ đây là một nỗ lực đáng hoan nghênh nhằm tách bạch bằng các thuật ngữ phổ thông hơn để giao tiếp với những lĩnh vực khác ngoài các nhà phát triển thuần túy.Nếu vấn đề là cả Authentication và Authorization đều có thể được rút gọn thành Auth,
thì như đã được nhắc trong bài, dùng Authn và Authz có lẽ là đủ rồi...
Nếu vẫn thấy cách đó chưa đủ rõ ràng, thì mở rộng thêm thành Authenty và Authory cũng không sao.
Hệ thống phân quyền thì lại có kiểu permission, có kiểu ACL nữa, vậy rồi định phân biệt thế nào đây..?
Nghe có vẻ hơi gượng ép...
Có lẽ đây là một nỗ lực nhằm giảm chi phí giao tiếp với các thành viên không thuộc nhóm phát triển, nhưng hơi quá tay một chút.
Không phải là người ta cố tình gộp cả hai lại rồi gọi là auth sao?
Đã có authentication và authorization rồi, tại sao còn nhất quyết dùng...
Ý kiến Hacker News