Oauth2 là gì? Cơ chế và cách hoạt động của Oauth2
Thịnh Văn Hạnh 05/06/2023 1088 Lượt xem Chia sẻ bài viết
Khi bạn đăng nhập các trang mạng xã hội như Facebook, Google, Twitter, bạn đang ứng dụng trên nền tảng OAuth2. Vậy OAuth2 là gì, ứng dụng này có vai trò gì, cách thức hoạt động và ưu nhược điểm của nó ra sao? Cùng BKNS tìm hiểu thông qua bài viết này dưới đây nhé.
Tóm Tắt Bài Viết
Oauth2 là gì?
OAuth2 (Open Authorization 2.0) là một giao thức ủy quyền phổ biến trong việc xác thực và ủy quyền truy cập giữa các ứng dụng, dịch vụ và người dùng. Nó được sử dụng rộng rãi trong các ứng dụng web và di động để cho phép người dùng đăng nhập và truy cập vào dữ liệu hoặc tài nguyên từ các ứng dụng khác mà không cần chia sẻ mật khẩu.
Giao thức OAuth2 hoạt động dựa trên việc cung cấp một phương thức an toàn để người dùng ủy quyền truy cập vào tài khoản của họ cho các ứng dụng và dịch vụ khác nhau thông qua việc cung cấp một mã thông tin truy cập (access token). Quá trình này xảy ra giữa các bên: người dùng, ứng dụng yêu cầu truy cập (client application), và nhà cung cấp dịch vụ (service provider) có tài khoản của người dùng.
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,…
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
Trên đây là những thông tin mà BKNS mang đến cho bạn đọc về OAuth2 là gì, cũng với những chia sẻ về cách hoạt động, ưu nhược điểm của OAuth2. Hy vọng với bài viết này bạn đọc đã có những đánh giá khách quan để có thể lựa chọn sử dụng phần mềm này. Đừng quên theo dõi những bài viết tiếp theo để có những thông tin hữu ích khác nhé.
Đọc thêm các bài viết khác: