OAuth2 là gì? Cách hoạt động, OAuth 2.1 và bảo mật API
Thịnh Văn Hạnh
28/04/2026
2710 Lượt xem
Chia sẻ bài viết
Khi đăng nhập website bằng Google, Facebook, GitHub hoặc Microsoft, bạn thường không cần nhập mật khẩu trực tiếp vào ứng dụng đó. Cơ chế đứng sau trải nghiệm này chính là OAuth2. Vậy OAuth2 là gì, hoạt động như thế nào và vì sao OAuth2 lại quan trọng trong bảo mật API?
Hiểu đúng bản chất, OAuth2 không phải là cơ chế xác thực danh tính thuần túy, mà là một framework ủy quyền giúp ứng dụng truy cập tài nguyên được cấp phép thông qua token. Trong bài viết này, BKNS sẽ giúp bạn hiểu rõ cách OAuth2 hoạt động, điểm mới của OAuth 2.1, vai trò của PKCE, Access Token, Refresh Token và những lưu ý bảo mật quan trọng khi triển khai OAuth2 cho website, ứng dụng và hệ thống API.
Tóm Tắt Bài Viết
OAuth2 là gì?
OAuth2, hay OAuth 2.0, là một framework ủy quyền cho phép ứng dụng bên thứ ba truy cập tài nguyên của người dùng thông qua token, thay vì yêu cầu người dùng chia sẻ mật khẩu.
Ví dụ đơn giản: bạn dùng một ứng dụng quản lý công việc và muốn đồng bộ lịch Google Calendar. Ứng dụng đó không cần biết mật khẩu Google của bạn. Thay vào đó, nó chuyển bạn sang Google để xác nhận quyền. Nếu bạn đồng ý, Google cấp cho ứng dụng một access token. Ứng dụng dùng token này để truy cập đúng phần dữ liệu được cho phép, chẳng hạn chỉ đọc lịch, không được đọc email hay chỉnh sửa file Drive.
OAuth.net cũng mô tả OAuth 2.0 là tiêu chuẩn ngành cho authorization, tức ủy quyền truy cập

OAuth có vai trò như thế nào?
OAuth xác định bốn vai trò chính trong quá trình ủy quyền truy cập:
1. Chủ sở hữu tài nguyên (Resource Owner): Chủ sở hữu tài nguyên là người dùng có quyền cấp phép truy cập vào tài khoản của họ. Ví dụ, khi bạn muốn chia sẻ thông tin như email, ngày sinh, giới tính và địa chỉ với một trang web có khả năng đăng nhập bằng tài khoản Facebook, bạn là chủ sở hữu tài nguyên trong trường hợp này.
2. Ứng dụng khách (Client): Ứng dụng khách là ứng dụng muốn truy cập vào tài khoản của người dùng. Trước khi được phép truy cập, ứng dụng khách phải nhận được sự ủy quyền từ người dùng và ủy quyền này phải được xác thực bởi máy chủ ủy quyền (Authorization Server) hoặc máy chủ nguồn tài nguyên (Resource Server).
3. Máy chủ nguồn tài nguyên (Resource Server): Máy chủ nguồn tài nguyên lưu trữ các tài khoản người dùng và bảo vệ chúng. Nó cung cấp các tài nguyên (ví dụ: thông tin người dùng) cho ứng dụng khách sau khi xác minh ủy quyền.
4. Máy chủ ủy quyền (Authorization Server): Máy chủ ủy quyền xác minh danh tính của người dùng và cấp mã thông báo truy cập (access token) cho ứng dụng khách. Trong một số trường hợp, máy chủ ủy quyền cũng có thể đóng vai trò là máy chủ nguồn tài nguyên.
Token là một chuỗi ký tự được tạo ngẫu nhiên bởi máy chủ ủy quyền khi nhận yêu cầu từ ứng dụng khách. Có hai loại token chính:
1. Access token (Mã thông báo truy cập): Được sử dụng để xác thực và ủy quyền truy cập của ứng dụng khách đến tài nguyên của người dùng trên máy chủ nguồn tài nguyên.
2. Refresh token (Mã thông báo làm mới): Được sử dụng để lấy một access token mới sau khi access token hiện tại hết hạn. Refresh token giúp tránh việc người dùng phải xác thực lại từ đầu.

Cách hoạt động của Oauth2
Để sử dụng OAuth 2.0, ứng dụng Client cần có thông tin đăng nhập riêng, bao gồm client ID và client secret, từ máy chủ ủy quyền (Authorization Server) để xác định và xác thực nó khi yêu cầu mã Access Token.
Trong việc sử dụng OAuth 2.0, quá trình trao đổi thông tin và phản hồi giữa Client và máy chủ ủy quyền tuân theo các bước sau:
1. Client gửi yêu cầu ủy quyền (Authorization Request) đến máy chủ ủy quyền, bao gồm client ID và client secret để xác định danh tính. Nó cũng cung cấp các phạm vi (scope) và địa chỉ URI của endpoint (redirect URI) để nhận Access Token hoặc Authorization Code.
2. Máy chủ ủy quyền xác thực client và kiểm tra xem các phạm vi yêu cầu có được cho phép hay không.
3. Chủ sở hữu tài nguyên tương tác với máy chủ ủy quyền để cấp quyền truy cập.
4. Máy chủ ủy quyền chuyển hướng trở lại Client bằng Authorization Code hoặc Access Token, tùy thuộc vào loại yêu cầu. Refresh Token cũng có thể được trả về.
5. Sử dụng Access Token, Client yêu cầu truy cập vào tài nguyên từ máy chủ nguồn tài nguyên (Resource Server).
Tài trợ xác định mã truy cập:
Trong OAuth 2.0, có một số loại tài trợ (grant types) được sử dụng để xác định cách thức trao đổi mã truy cập (access code) và mã thông báo truy cập (access token). Các loại tài trợ phổ biến bao gồm:
– Authorization Code Grant: Sử dụng để trao đổi Authorization Code lấy Access Token.
– Implicit Grant: Cho phép trao đổi trực tiếp từ Access Token mà không cần Authorization Code.
– Client Credentials Grant: Sử dụng thông tin xác thực của Client để lấy Access Token mà không cần phụ thuộc vào quyền truy cập của người dùng.
– Resource Owner Password Credentials Grant: Sử dụng thông tin đăng nhập của chủ sở hữu tài nguyên để lấy Access Token.
– Refresh Token Grant: Sử dụng Refresh Token để lấy một Access Token mới khi Access Token hiện tại hết hạn.
Các loại tài trợ này cho phép tương tác linh hoạt giữa Client, máy chủ ủy quyền và máy chủ nguồn tài nguyên trong quá trình ủy quyền truy cập và xác thực.

Ưu nhược điểm của Oauth2
Ưu điểm
Hiện nay Oauth2 được sử dụng rộng rãi vì có những ưu điểm sau:
- Phiên bản Oauth2 được coi là một giao thức linh động được hoạt động dựa trên SSL, và được sử dụng để có thể bảo vệ hoàn toàn quyền riêng tư giữa sever web và trình duyệt. Phiên bản này giúp lưu token cho việc truy vấn người dùng một cách nhanh gọn và tiện lợi.
- Phân phối xác nhận nhanh hơn và thuận tiện hơn phiên bản cũ.
- Cho phép truy cập hạn chế vào dữ liệu của người dùng và cho phép truy cập khi authorization token hết hạn.
- Chia sẻ dữ liệu cho người dùng mà không cần username hay password.
Nhược điểm
Nếu ứng dụng hay web của người dùng được kết nối với các trung tâm và tài khoản trung tâm bị hack, thì sẽ ảnh hưởng đến nhiều trang web.
Nếu có thêm phần mở rộng mô tả hệ thống, thì sẽ tạo ra một loạt các triển khai không hỗ trợ tương tác. Đồng nghĩa là người dùng phải viết riêng mã cho Facebook, Google,…

OAuth2 khác gì với Authentication, OpenID Connect, JWT và API Key?
Bảng so sánh sự khác nhau:
| Tiêu chí | OAuth2 | OpenID Connect | JWT | API Key |
| Bản chất | Khung ủy quyền | Lớp xác thực danh tính xây trên OAuth2 | Định dạng token | Mã định danh dùng để gọi API |
| Trả lời câu hỏi | Ứng dụng được quyền làm gì? | Người dùng là ai? | Token chứa thông tin gì? | Ứng dụng nào đang gọi API? |
| Dùng cho đăng nhập? | Không đầy đủ nếu đứng riêng | Có | Không phải cơ chế đăng nhập | Không phù hợp cho đăng nhập người dùng |
| Mức độ bảo mật | Cao nếu triển khai đúng | Cao nếu triển khai đúng | Phụ thuộc cách ký/lưu trữ | Thấp hơn nếu dùng đơn lẻ |
| Ví dụ | Cấp quyền đọc Google Calendar | Đăng nhập bằng Google | Access token dạng JWT | API key cho dịch vụ thời tiết |
Các loại Grant Type trong Oauth2
Trong OAuth 2.0, các loại grant định nghĩa các bước mà client phải tuân theo để nhận quyền truy cập vào tài nguyên. Dưới đây là mô tả lại các loại grant trong OAuth 2.0:
1. Authorization Code Grant:
Quy trình này yêu cầu client nhận Authorization Code từ máy chủ ủy quyền (Authorization Server), sau đó sử dụng mã này để trao đổi lấy Access Token. Loại grant này thích hợp cho các ứng dụng web truyền thống, nơi quá trình trao đổi có thể xảy ra an toàn trên máy chủ. Tuy nhiên, việc lưu trữ client secret không an toàn ở phía client. Để giải quyết vấn đề này, Authorization Code with PKCE grant là một giải pháp tốt hơn.
2. Implicit Grant:
Đây là quy trình đơn giản hơn, trong đó Access Token được trả về trực tiếp cho client. Trong Implicit Grant, máy chủ ủy quyền có thể trả về Access Token dưới dạng tham số trong callback URI hoặc dưới dạng biểu mẫu. Tuy nhiên, việc sử dụng Implicit Grant hiện không còn được khuyến nghị do khả năng rò rỉ thông tin nhạy cảm.
3. Authorization Code Grant with Proof Key for Code Exchange (PKCE):
Đây là một phiên bản cải tiến của Authorization Code Grant, bổ sung thêm các bước để tăng tính bảo mật cho các ứng dụng di động, ứng dụng gốc và Single Page Application (SPA).
4. Resource Owner Credentials Grant Type:
Loại grant này yêu cầu client thu thập thông tin đăng nhập của chủ sở hữu tài nguyên và gửi đến máy chủ ủy quyền. Do đó, loại grant này chỉ được sử dụng trong các trường hợp đáng tin cậy hoàn toàn với client.
5. Client Credentials Grant Type:
Loại grant này được sử dụng cho các ứng dụng không liên quan đến chủ sở hữu tài nguyên hoặc không cần tương tác với người dùng. Ví dụ, các quy trình tự động, microservices, v.v. Trong loại grant này, ứng dụng xác thực bằng cách sử dụng client id và client secret.
6. Refresh Token Grant:
Quy trình này liên quan đến việc sử dụng Refresh Token để lấy Access Token mới khi Access Token hiện tại hết hạn.
Kết luận
OAuth2 là một framework ủy quyền quan trọng trong hệ thống web, mobile app, API và microservices. Điểm cần nhớ là OAuth2 không phải authentication thuần túy. Nó giúp ứng dụng được cấp quyền truy cập có giới hạn mà không cần biết mật khẩu người dùng.
Khi triển khai OAuth2, doanh nghiệp nên ưu tiên Authorization Code Flow + PKCE, loại bỏ Implicit Grant và Password Grant, kiểm soát redirect URI, state, scope, token và bắt buộc dùng HTTPS. Bên cạnh phần code, hạ tầng cũng rất quan trọng. Một hệ thống OAuth2 ổn định cần Cloud VPS đủ tài nguyên, SSL hợp lệ, máy chủ an toàn, bảo mật API và cơ chế giám sát tốt. Đây cũng là nhóm hạ tầng mà BKNS có thể cung cấp để hỗ trợ website, ứng dụng và hệ thống API vận hành an toàn hơn
Đọc thêm các bài viết khác:



































