Google sử dụng thuật toán gì để giúp ta đăng nhập
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:
- Client: Đây là các web/app muốn truy cập đến ứng dụng của chúng ta. Có thể hiểu đơn giản Client là một front-end bất kì.
- Resource Server: Đây chính là server của chúng ta. Client mong muốn tương tác với resource server và nhận về data.
- Authorization Server: Chỉ những server hỗ trợ việc xác thực bằng thuật toán Oauth2 như google, facebook…
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:
ClientID
&Secrect
: Đây có thể xem là first authenticate giúp OAuth2 xác thực một ứng dụng. Hai thuộc tính này đóng vai trò như ID và password của mỗi web application.scope
: Đây là second authenticate của thuật toán. Một web app có thể có nhiều scope khác nhau nhưadmin
,user
,guest
… Ứng với mỗiscope
AuthServer có thể quy định Client được phép truy cập vào một số resources nhất định.RedirectURI
: Đây là URL mà AuthServer sẽ redirect về cùng với user token (đương nhiên là user phải đăng nhập thành công mới được trả về nha 😃).RedirectURI
này là cố định và phải được Resource Server khai báo với Auth Server lúc khởi tạo ứng dụng.
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)
- Như vậy, chúng ta có thể thấy mọi thao tác phân quyền, trạng thái đăng nhập sẽ được quản lý bởi AuthorizationServer. ResourceServer lúc này có thể quyết định sử dụng luôn access Token từ AuthorizationServer hoặc tự tạo riêng một access token để quản lý trạng thái đăng nhập của user.
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