Hiện tại rất nhiều nền tảng khác nhau như Google, Facebook,… sử dụng OAuth. Chính sự phát triển mạnh mẽ đã thúc đẩy phần mềm OAuth cải tiến và ra mắt phiên bản mới nhất là OAuth 2.0. Vậy OAuth 2.0 là gì? Nó có vai trò như thế nào? Cách thức hoạt động ra sao? Hãy cùng BKHOST tìm hiểu ngay trong bài viết dưới đây.
OAuth 2.0 là gì?
OAuth 2.0 là phiên bản mới nhất của giao thức OAuth (Open Authorization), nó đã thay thế cho OAuth 1.0 vào năm 2012. OAuth 2.0 là một tiêu chuẩn được thiết kế để một website hoặc ứng dụng được phép thay mặt người dùng truy cập vào tài nguyên được lưu trữ ở ứng dụng web khác.
OAuth 2.0 cung cấp quyền truy cập để các ứng dụng chia sẻ tài nguyên với nhau mà không cần xác thực thông tin đăng nhập. Điều này không chỉ giúp bạn tiết kiệm thời gian mà còn tránh phiền toái khi phải nhớ vô số tài khoản đăng nhập ở các ứng dụng khác nhau.
Nguyên tắc của OAuth 2.0
OAuth 2.0 là một giao thức ủy quyền chứ không phải là giao thức xác thực, vì vậy có thể xem nó như một phương tiện dùng để cấp quyền truy cập vào tài nguyên của ứng dụng.
OAuth 2.0 sử dụng mã thông báo truy cập (Access tokens) để cấp quyền truy cập vào tài nguyên cho website và ứng dụng. Mã thông báo truy cập sẽ không được OAuth 2.0 định dạng cụ thể. Tuy nhiên ở một số trường hợp định dạng JSON Web Token (JWT) thường được sử dụng. Bên cạnh đó vì lý do bảo mật nên mã thông báo truy cập có thể có ngày hết hạn.
Vai trò của OAuth 2.0
Trong OAuth 2.0 định nghĩa 4 vai trò sau:
- Resource Owner (chủ sở hữu tài nguyên): là người dùng hoặc hệ thống sở hữu tài nguyên có khả năng cấp quyền truy cập vào tài khoản của họ.
- Client (máy khách): là ứng dụng muốn truy cập vào tài nguyên được bảo vệ. Muốn thực hiện được điều đó Client phải nhận được ủy quyền từ chủ sở hữu tài nguyên.
- Authorization Server (máy chủ ủy quyền): là đối tượng quyết định việc cấp quyền truy cập dữ liệu cho Client. Authorization Server nhận yêu cầu từ Client sau đó xác minh danh tính người dùng và cấp mã access token để Client truy cập ứng dụng.
- Resource Server (máy chủ tài nguyên): là nơi lưu trữ những tài nguyên mà người dùng chia sẻ. Server này chấp nhận và xác thực mã truy cập từ Client.
Phạm vi OAuth 2.0
Trong OAuth 2.0 phạm vi là một khái niệm khá quan trọng. Chúng được sử dụng nhằm mục đích chỉ định chính xác lý do cấp quyền truy cập vào tài nguyên. Resource Server quyết định tới việc xác định giá trị phạm vi ở tài nguyên mà ứng dụng và web được phép truy cập.
Mã ủy quyền và mã truy cập OAuth 2.0
Nếu để lộ Access token (mã truy cập) thì nguy cơ tài nguyên bị kẻ xấu lấy cắp rất cao. Vì thế Authorization Server có thể không trực tiếp trả lại Access token sau khi Resource Owner có quyền truy cập. Để bảo mật tốt hơn, Authorization Code (mã ủy quyền) được trả lại và đổi lấy Access token.
Bên cạnh đó Authorization Server cũng phát hành Refresh token (mã mới). Nếu Access token thời gian hiệu lực chỉ tầm 2 giờ thì Refresh token có thể lên tới 10 giờ. Khi Access token hết hạn client sẽ dùng Refresh token để đổi lấy Access token mới.
OAuth 2.0 hoạt động như thế nào?
Ở cấp độ cơ bản nhất, trước khi dùng OAuth 2.0 Client phải được Authorization Server cấp đầy đủ thông tin đăng nhập riêng, client ID và client secret để nhận dạng và xác thực chính nó khi yêu cầu Access token.
Khi sử dụng OAuth 2.0, các yêu cầu truy cập do chính client tạo ra, chẳng hạn như ứng dụng dành cho website, điện thoại di động, tivi thông minh, desktop…Yêu cầu Access token, trao đổi và phản hồi thông tin tuân thủ theo các bước sau:
- Bước 1: Client yêu cầu ủy quyền từ Authorization Server. Lúc này Authorization Server cung cấp client ID và client secret để nhận dạng đồng thời cung cấp phạm vi và một URI điểm cuối để gửi Access token hoặc Authorization Code đến.
- Bước 2: Client được Authorization Server xác thực và xác minh các phạm vi yêu cầu được cho phép.
- Bước 3: Resource Server tương tác với Authorization Server để cấp quyền truy cập.
- Bước 4: Authorization Server trả về cho client bằng Authorization Code hoặc Access token, Refresh token cũng có thể được trả lại.
- Bước 5: Với Access token, client yêu cầu quyền truy cập vào tài nguyên từ Resource Server.
Các loại Grant Type trong OAuth2
Để sử dụng OAuth2, client phải thực hiện các bước để được cấp ủy quyền truy cập tài nguyên. Tập hợp các bước đó gọi là Grant Type. Dưới đây Authorization framework cung cấp một số loại Grant Type để giải quyết các trường hợp khác nhau, cụ thể:
- Authorization Code grant (cấp mã ủy quyền): Client được Authorization Server trả lại Authorization code sử dụng một lần sau đó đổi lấy Access token. Đây là lựa chọn hoàn hảo cho các web truyền thống để đảm bảo việc trao đổi có thể diễn ra an toàn ở Server.
- Implicit Grant (cấp quyền ngầm): Đây là một quy trình đơn giản trong đó Access token được trả lại trực tiếp cho client. Ở quy trình ngầm định này, Access token được Authorization Server trả lại dưới dạng callback URI biểu mẫu.
- Authorization Code Grant with Proof Key for Code Exchange (PKCE): Quy trình này tương tự như Authorization Code grant nhưng có thêm các bước bổ sung để đảm bảo an toàn cho các ứng dụng di động, các SPA và native app.
- Resource Owner Credentials Grant Type: Grant này chỉ giới hạn cho những client đáng tin cậy bởi nó yêu cầu client cung cấp thông tin đăng nhập của Resource Owner để chuyển đến Authorization Server.
- Client Credentials Grant Type: Grant này dùng cho các ứng dụng không có tính tương tác chẳng hạn như dịch vụ vi mô, quy trình tự động…
- Device Authorization Flow: Grant này cho phép các ứng dụng sử dụng các thiết bị hạn chế đầu vào ví dụ như tivi thông minh.
- Refresh Token Grant: Quy trình này liên quan tới việc trao đổi giữa Refresh Token và Access Token.
Tổng kết về OAuth 2.0
Bài viết trên chúng tôi đã tổng hợp những thông tin liên quan tới OAuth 2.0. Hy vọng với kiến thức có được bạn sẽ có đánh giá khách quan, chính xác để sử dụng phần mềm hữu ích này.
Nếu bạn bất cứ câu hỏi nào liên quan đến OAuth 2.0hoặc muốn tìm hiểu thêm những thông tin khác, hãy để lại ở bên bình luận bên dưới, BKHOST sẽ trả lời bạn trong thời gian sớm nhất.
P/s: Bạn cũng có thể truy cập vào Blog của BKHOST để đọc thêm các bài viết chia sẻ kiến thức về lập trình, quản trị mạng, website, domain, hosting, vps, server, email,… Chúc bạn thành công.