Tổng quan về Authentication và Authorization trong Lập trình Website

Tổng quan về Authentication và Authorization trong Lập trình Website

Authorization là gì

Authentication là gì? Authorization là gì? Chúng khác nhau như thế nào? Theo dõi bài viết dưới đây để tìm ra câu trả lời nhé!

Giới thiệu về Authentication và Authorization

Authentication là gì? Authentication (tạm dịch: xác thực) là quá trình kiểm tra danh tính một tài khoản đang vào hệ thống hiện tại thông qua một hệ thống xác thực.

Đây là bước ban đầu của mọi hệ thống có yêu cầu về nhận biết người dùng hoặc có yêu cầu lưu trữ các hành động cá nhận hoá của từng người dùng riêng. Hiểu đơn giản, Authentication là quá trình đi tìm câu trả lời cho câu hỏi “Bạn là ai?”

Authorization là quá trình để xác định người dùng có được xác thực có quyền truy cập vào các tài nguyên cụ thể hay không. Nó xác minh quyền của bạn để cấp cho bạn quyền truy cập vào các tài nguyên như thông tin, cơ sở dữ liệu, file,…

Authorization thường được đưa ra sau khi xác thực xác nhận các đặc quyền thực hiện của bạn. Nói một cách đơn giản hơn, nó giống như cho phép ai đó chính thức làm điều gì đó hoặc bất cứ điều gì.

Authentication khác gì so với Authorization ?

Authorization và Authentication bổ trợ cho nhau

Authentication (xác thực) và Authorization (ủy quyền) là hai quá trình khác nhau trong quản lý an toàn thông tin.

Authentication (xác thực) có nghĩa là xác nhận danh tính của riêng bạn, trong khi Authorization (ủy quyền) có nghĩa là cấp quyền truy cập vào hệ thống. Nói một cách đơn giản, Authentication là quá trình xác minh bạn là ai, trong khi authorization là quá trình xác minh những gì bạn có quyền truy cập vào.

Ví dụ, khi bạn đăng nhập vào một trang web, quá trình đăng nhập sẽ xác thực tài khoản của bạn (trong trường hợp này chính là quá trình Authencation). Sau đó, quá trình ủy quyền (Authorization) sẽ xác định những chức năng mà bạn có thể truy cập và sử dụng trong trang web đó.

Như vậy, mặc dù cả hai quá trình là khác nhau nhưng chúng bổ trợ cho nhau để giúp hệ thống có thể định danh một phiên sử dụng của người dùng bất kỳ và xác định quyền hạn, khả năng của phiên sử dụng đó.

Authencation trong lập trình website

Trong lập trình website, có một số cách phổ biến để thực hiện việc xác thực (Authentication) như sau:

  • Tài khoản – mật khẩu: Đây là cách phổ biến nhất để xác thực tài khoản trong lập trình web. Người dùng sẽ nhập tên đăng nhập và mật khẩu để truy cập vào hệ thống.

Một giải pháp thường gặp cho quá tình sử dụng tài khoản – mật khẩu để đăng nhập có thể liệt kê như:

  • Triển khai đăng nhập Cookie + session: Phương thức đăng nhập Cookie + Session là phương pháp đăng nhập cổ điển nhất và vẫn được một số lượng lớn các doanh nghiệp sử dụng. Khi người dùng đăng nhập lần đầu tiên thì chuyện gì sẽ xảy ra? Giả sử ta có mô hình sau.
Mô tả quá trình đăng nhập lần đầu tiên

Sau khi hoàn thành lần đăng nhập đầu tiên, những lần truy cập tiếp theo có thể sử dụng trực tiếp cookie để xác thực:

Hoàn thành lần đăng nhập đầu tiên, những lần truy cập tiếp theo có thể sử dụng trực tiếp cookie để xác thực.
  • Triển khai đăng nhập bằng Token: Khác với việc tận dụng các bộ nhớ có sẵn của server là session, việc xác thực bằng token yêu cầu người dùng phải lưu một chuỗi các ký tự ở bộ nhớ client (bộ nhớ của người sử dụng) với lần đầu tiên gửi yêu cầu xác thực bằng tài khoản và mật khẩu, hệ thống sẽ tạo cho người dùng một token (được mã hoá bởi các thuật toán mã hoá khác nhau) với mục đích người dùng sẽ sử dụng token vừa được cung cấp như một chiếc vé cho các lần truy vấn tiếp theo.
Triển khai đăng nhập bằng Token

Sau khi đã có token, mỗi yêu cầu tiếp theo của người dùng sẽ được kèm theo token đã cung cấp. Hệ thống server nhận token sẽ tiến hành dịch ngược và xác định được người dùng đang truy vấn là ai.

  • Chứng thực OAuth: OAuth là một tiêu chuẩn cho việc chứng thực qua mạng xã hội như Facebook, Google hoặc Twitter.

OAuth là viết tắt của Open với Authentication hoặc Authorization. OAuth ra đời nhằm giải quyết các vấn đề trên và trên hết, đây là một phương thức chứng thực giúp các ứng dụng có thể chia sẻ tài nguyên với nhau mà không cần chia sẻ thông tin username và password.

OAuth bao gồm bốn vai trò khác nhau

  • Resource Server: REST API là một ví dụ, một máy chủ HTTP nơi người dùng có thể tạo, sửa đổi hoặc xóa các bản ghi, tài liệu hoặc tệp.
  • Resource Owner: Duy trì quyền sở hữu tài nguyên mà người dùng đã tạo hoặc sửa đổi trên máy chủ và người ủy quyền cho ứng dụng bên thứ 3 truy cập vào tài khoản của họ. Ứng dụng của bên thứ 3 có quyền truy cập hạn chế vào tài khoản của người dùng, dựa trên phạm vi của phạm vi của ủy quyền được cấp.
  • Client: Ứng dụng bên thứ 3 muốn truy cập vào tài khoản người dùng. Trước khi nó có thể làm như vậy, máy chủ Resource/Authorization và chủ sở hữu tài nguyên phải ủy quyền cho yêu cầu đó. Mọi khách hàng phải được đăng ký với máy chủ Authorization và sẽ được cung cấp cho nó thông tin xác thực duy nhất của riêng mình (client_id và client_secret) để xác thực riêng.
  • Authorization Server (thường là giống Resource Server): Đôi khi, ta có thể muốn rút ra khỏi máy chủ authorization từ máy chủ resource và triển khai nó như một phiên bản chuyên dụng, đặc biệt là trong các môi trường phân tán.
Mỗi cách sinh ra đều có điểm mạnh riêng của nó

Ví dụ:

Khi ta đăng nhập bằng Facebook hay Gmail, website sẽ dẫn ta đến trang (hoặc phần mềm) Facebook và liệt kê những quyền mà nó cần phải có để cho phép bạn đăng nhập và sử dụng dịch vụ. Nếu ta đồng ý thì lúc này Facebook sẽ phát cho website một cái token. Token này chứa một số quyền hạn nhất định giúp cho website có thể xác minh chúng ta là ai cũng như giúp cho website có thể hoạt động được. Nếu website này bị hacker tấn công thì nó chỉ lấy được thông tin hay hoạt động của ta trên website đó mà không ảnh hưởng đến những website khác đang sử dụng. Do đó cách đăng nhập bằng phương thức OAuth này rất an toàn cho người dùng cuối như chúng ta.

  • Chứng thực dựa trên vấn đề thiết bị: Đây là một cách xác thực tài khoản dựa trên vấn đề của thiết bị. Ví dụ, một mã QR hoặc mã số được tạo ra từ một thiết bị và nhập vào một thiết bị khác để xác thực tài khoản.

Mỗi cách được liệt kê ở trên đều có điểm mạnh riêng của nó, hi vọng mỗi lập trình viên đã biết cách lựa chọn cách xác thực tài khoản phụ thuộc vào yêu cầu bảo mật của hệ thống hoặc dịch vụ.

Bộ môn Công nghệ thông tin Cao đẳng FPT Polytechnic Hà Nội