CLASSFUNC BLOG
We Share Our Knowledge
OAuth 2, cùng hiểu hơn về ứng dụng để xác thực và uỷ quyền với bảo mật mạnh mẽ
Dam Van Duong
20 Th09 2020 17:16

Trước tiên chúng ta đi vào phân biệt Authentication và Authorization.

  • Authentication: Để kiểm tra danh tính của người dùng, tác dụng chủ yếu là để xác thực người dùng.
  • Authorization: Sau khi hệ thống xác thực Authentication của người dùng, người dùng có thể truy cập tài nguyên của hệ thống thông qua các Scopes được bật cho người dùng. Ví dụ: xem thông tin user, thông tin files, tài liệu, giao dịch v.v...

Ta hiểu đơn giản hệ thống Authorization hay OAuth sẽ là trung gian để phía Client người dùng thao tác được với API của hệ thống xác định nào đấy dưới các Scopes được bật cho người dùng thông qua một mã Access_Token là mã truy cập hợp lệ mà API có thể chấp nhận để trả về dữ liệu.

Chúng ta cùng tìm hiểu đôi chút một ví dụ về sơ đồ hoạt động của OAuth từ Google Server nhé:

Google Servers có 5 tình huống ứng với 5 cách xác thực để lấy mã code khác nhau bao gồm:

  1. Web server applications.
  2. Installed applications.
  3. Client-side (JavaScript) applications.
  4. Applications on limited-input devices.
  5. Service accounts.

Ở đây chúng ta cùng tìm hiểu về cách thông thường Web server applications nhé

authorization-code.png
Hình 1. Using OAuth 2.0 for Web Server Applications.

Bước 1: Phía Client, user thông qua màn hình User Login & Consents Screen sẽ đồng ý xác thực trao quyền đăng nhập cho phía App OAuth, Sau khi đăng nhập và xác thực thành công, phía Server sẽ trả về cho Client một mã Code (code này có quyền truy cập vào API và chỉ sử dụng 1 lần duy nhất).

Bước 2: Client tiếp tục cầm code vừa nhận được gửi lại Server, Lúc này, nếu thành công, server sẽ trả về cho bạn một mã JSON gồm:

{ access_token: 'ljaiajdoiasdoad....',   refresh_token: 'ahdjahskdads....', exp: time, scopes: [] }

Bước 3: Lúc này, client có thể thao tác với server để lấy dữ liệu bằng access_token.

Bước 4: Khi access_token hết hạn, bạn có thể làm mới access_token bằng cách gửi mã refresh_token đến server và yêu cầu cấp mới lại access_token.

Tham khảo: