Express.js - Passport.js - cơ bản phải biết về Authentication
TIL
720
@100daysTIL
72
White

Minh-Trung Nguyễn viết ngày 17/02/2018

Express.js - Passport.js - cơ bản phải biết về Authentication

Day23 (Mùng 1 Tết Mậu Tuất)

Authentication là gì, khác gì với Authorization?

Theo từ điển:

  • authentication = the process or action of proving or showing something to be true, genuine, or valid.

  • authorization = the action or fact of authorizing or being authorized.

Vậy đại loại:

  • authentication là quy trình/ quá trình/ hành động để chứng mình:
    • bản Windows XP ta đang dùng là ... "genuine" (được mua bản quyền, không bị can thiệp bởi bên thứ 3)
    • chữ ký của ông giám đốc trên văn bản tăng lương là ... chính chủ.
    • quy định cho ô tô đi qua trạm BOT không cần thu phí là ... hợp lệ.
  • authorization là quá trình cho phép, cấp phép ai đó làm cái gì đấy, kiểu như:
    • Bộ phận nhân sự của các công ty không được bán số điện thoại cá nhân của nhân viên khi không được sự cho phép của người lao động.

Trong tin học, có thể tóm gọn qua bảng sau:

Authentication Authorization
Nhập đúng username & password, chứng tỏ mình đúng là người đã đăng ký, hệ thống cho phép đăng nhập để sử dụng dịch vụ, đây gọi là "authentication" Dù đăng nhập đúng, nhưng nếu chỉ là thành viên thường, không phải admin, thì chỉ được xem hạn chế một vài mục, đây gọi là "authoriztion"

Về mặt logic:

  • "authentication" phải đi trước "authorization".
  • nhưng người ta "thường" kết hợp 2 thứ trên vào làm một, khiến cho người không biết bị nhầm lẫn.

Về mặt dịch thuật, có lẽ:

  • "authentication" được dịch là "chứng thực nhận dạng"
  • "authorization" được dịch là "phân quyền/ cấp phép".

Những yếu tố naò giúp xác định "authentication"?

Việc chứng thực nhận dạng xảy ra ở khắp nơi, từ việc chứng minh bạn là chủ tài khoản để rút tiền ở ATM, đến việc bạn là chủ tài khoản email để gửi thư, từ việc bạn là chủ chữ ký để ký hợp đồng triệu đô, đến việc bạn là chủ điện thoại để đăng nhập sử dụng.

Muốn quá trình "authentication" diễn ra ngon lành, thì cũng giống như 1 thằng cha bán hàng đa cấp chứng minh bản thân để đi lừa tiền người dân vậy. Hắn phải chứng minh:

  • những gì hắn BIẾT, ví dụ biết cách làm giàu bằng tiền ảo và giới thiệu để người dân tin.
  • những vật chất hắn SỞ HỮU, tức là xe sang, bộ vest xịn giầy bóng mượt mà.
  • những thứ thuộc về CON NGƯỜI hắn, tức là nụ cười khả ái, cái mắt lúng liếng, cái mồm thoăn thoắt, hành vi đĩnh đạng, thể hiện một tầm vóc lớn.

Ba yếu tố trên, tùy yêu cầu mà dùng một yếu tố, hoặc kết hợp vài cái lại, sẽ giúp tạo ra quá trình "authentication" mạnh mẽ tùy ý.

# Yếu tố Giải thích Ví dụ
1 Kiến thức Bạn BIẾT gì? Bạn biết mật khẩu, tên đăng nhập, mã PIN, câu hỏi bí mật, thông tin cá nhân ...
2 Sự sở hữu Bạn CÓ gì? Bạn có ... chìa khóa, có thẻ ATM, có điện thoại (để nhận mã OTP),...
3 Đặc điểm sinh học Bạn TRÔNG như thế nào? Vân tay, mồng mắt, giọng nói, khuôn mặt, nhịp tim, chữ ký tay, ...

Có bao nhiêu loại "authentication" dựa vào các yếu tố trên?

Trong thế giới online thì có 1 cách phân loại dựa vào 3 yếu tố tạo thành "authentication" trên: đó là dựa vào số lượng yếu tố sử dụng:

  • Nếu chỉ dùng 1 yếu tố -> single-factor authentication (không biết ví dụ nào để minh họa nữa)
  • Nếu dùng 2 yếu tố --> two-factor authentication: chính là vụ đăng nhập tài khoản ngân hàng cần cả thẻ ATM (sở hữu) và mã PIN (kiến thức).
  • Nếu dùng 3 yếu tố --> multi-factor authentication.

Trong thế giới web application, còn cách phân loại authentication nào nữa không?

  1. Cách cổ điển: Nhập username và password.
  2. Cách hiện đại: Mượn mạng xã hội (như Twitter, Facebook) để đăng nhập, gọi là OAuth -> Vô cùng tiện, đỡ phải nhớ lằng nhằng. Để biết kỹ về OAuth, tốt nhất là đọc tài liệu của nó, hoặc Wikipedia. Còn hiện tại, bản thân cứ hiểu nôm na (dù vẫn còn khá xa so với sự thực) về loại authentication sử dụng bên thứ 3 này là:
    • Thay vì phải nhớ 2 username và 2 password để đăng nhập vào dịch vụ A và dịch B, bây giờ ta chỉ cần nhớ username và password của dịch vụ A.
    • Mỗi lần đăng nhập vào B, ta làm các bước:
      • Quay sang A, xin hắn cái thư đảm bảo rằng ta là chính chủ của 1 account do A cung cấp.
      • Quay sang B, cầm thư đảm bảo của A đưa cho B.
      • Vậy là B cho ta đăng nhập.
    • Cái "thư đảm bảo" nói trên có hình thức sao, format kiểu gì, nội dung ra sao, rồi cách thức trao đổi thư từ thế nào thì phải đọc chi tiết OAuth. Nói lung tung bị chửi ngay.

Còn gì để nói về cách hoạt động của authentication nữa không?

Vẫn chưa hết :-O, vẫn còn 1 thuật ngữ nữa là "cơ chế" (mechanism) của authentication. Trang này liệt kê 6 cơ chế của authentication, tuy vậy chỉ để tham khảo, vì hình như không có định nghĩa chính thức về vụ này: (1) passwords, (2) hard tokens, (3) soft tokens, (4), biometric authentication, (5) contextual authentication, và (6) device identification.

Trong Passport.js, một thư viện JavaScript dùng cho việc authentication trong Node.js và Express.js, "cơ chế" được gọi là "strategies" (chiến lược).

Kết luận

  • Authentication dính đến bảo mật, trông đơn giản mà phức tạp và đầy rẫy các từ chuyên môn.
  • Cần tìm hiểu về Passport.js để sử dụng thay vì tự viết authentication:
    • Tính năng của Passport.js?
    • Các authentication strategies?
    • Logic flow của nó là gì?
    • Ví dụ mẫu?

ngminhtrung 17-02-2018

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Minh-Trung Nguyễn

62 bài viết.
95 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
50 15
Đăng lại một bài đã viết từ cách đây mấy tháng. Chủ đề này đã có không ít, nhưng chẳng hiểu sao lượng bài tự viết của dân lập trình người Việt ta v...
Minh-Trung Nguyễn viết hơn 1 năm trước
50 15
White
28 6
Ghi chú: Tiêu đề hoàn toàn mang tính câu view. Bài copy từ blog của tác giả :) Tại sao lại có bài viết này? Một ngày đẹp giời tôi cần kiểm t...
Minh-Trung Nguyễn viết hơn 1 năm trước
28 6
White
18 4
Về bước tìm và xử lý dữ liệu của Việt Nam phục vụ Data Visualization nền web Làm việc với D3js được nửa năm, một trong những điều bận lòng là chưa...
Minh-Trung Nguyễn viết hơn 1 năm trước
18 4
Bài viết liên quan
White
3 1
Javascript inititalValue trong reduce() có quan trọng không? Day 41: Đọc code mẫu về hàm reduce() trong (Link), thấy hàm reduce() khá "đơn giản"....
Minh-Trung Nguyễn viết hơn 1 năm trước
3 1
White
0 4
fCC: Technical Documentation Page note So I have finished the HTML part of this exercise and I want to come here to lament about the lengthy HTML ...
HungHayHo viết 1 năm trước
0 4
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
62 bài viết.
95 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!