Vấn đề

Nếu như trước đây, mỗi trang web sẽ có một trang đăng nhập đăng xuất riêng làm cho chúng ta dễ dàng từ bỏ trang web ngay từ lúc đăng ký. Thì giờ đây hầu hết các trang web đã cho phép ta đăng nhập - đăng ký nhanh với tài khoản mạng xã hội như google, facebook,… Vậy bản chất của việc đăng nhập này là gì, có phải google gửi mật khẩu qua cho những trang web yêu cầu không? 😂. Chúng ta cùng tìm hiểu về OAuth2 - Thuật toán chia sẻ tài nguyên giữa các ứng dụng nhé.

Một số quy ước.

Để tiện cho việc theo dõi, mình sẽ quy ước một số khái niệm sau:

Resources cần thiết

Với hàng ngàn ứng dụng yêu cầu quyền đăng nhập và hàng triệu tài khoản. OAuth2 sẽ dựa ba thuộc tính chính để xác thực tài khoản cho một web app bao gồm:

Cách hoạt động.

Bây giờ chúng ta hãy cùng xem cách các server tương tác với nhau nhé.

%%{
  init: {
    'theme': 'base',
    'themeVariables': {
      'primaryColor': '#BB2528',
      'primaryTextColor': '#fff',
      'primaryBorderColor': '#7C0000',
      'lineColor': '#F8B229',
      'secondaryColor': '#006100',
      'tertiaryColor': '#fff'
    }
  }
}%%
sequenceDiagram
    participant User
    participant Client
    participant AuthorizationServer
    participant ResourceServer

    User->>+Client: Truy cập ứng dụng (1)
    Client->>+AuthorizationServer: Yêu cầu xác thực (2)
    AuthorizationServer->>-User: Hiển thị giao diện đăng nhập (3)
    User->>+AuthorizationServer: Nhập thông tin đăng nhập (4)
    AuthorizationServer->>-User: Xác thực thành công (5)

    User->>+Client: Ứng dụng đã xác thực (6)

    User->>+Client: Truy cập tài nguyên (7)
    Client->>+AuthorizationServer: Yêu cầu access token (8)
    AuthorizationServer->>-Client: Trả về access token (9)

    Client->>+ResourceServer: Yêu cầu resources với access token (10)
    ResourceServer->>+AuthorizationServer: Xác thực access token (11)
    AuthorizationServer->>+ResourceServer: Xác thực access token hợp lệ (12)
    ResourceServer->>+Client: Trả về resources (13)

    Client->>+User: Hiển thị resources (14)

Tổng kết:

Trong bài viết này, mình đã giới thiệu cơ bản về thuật toán OAuth2, cách các server tương tác nhau. Bài viết với mục đích để tất cả mọi người có thể hiểu được những khái niệm cơ bản nhất của Oauth2. Cảm ơn các bạn đã đọc