OAuth2 hiện đang được các nền tảng mạng xã hội lớn như Facebook, Google, Twitter sử dụng. Vậy OAuth2 là gì? Cách thức hoạt động và ưu nhược điểm của OAuth2 như thế nào? Chúng ta cùng tìm hiểu trong bài viết dưới đây nhé.
Oauth2 là gì?
OAuth 2 là một phiên bản tiếp theo của giao thức OAuth (Open Authorization), là một tiêu chuẩn được thiết kế để cho phép một trang web hoặc ứng dụng truy cập vào tài nguyên được lưu trữ bởi các ứng dụng web khác thay mặt cho người dùng.
OAuth2 đã thay thế OAuth 1.0 vào năm 2012 và hiện là tiêu chuẩn ngành trên thực tế để ủy quyền trực tuyến. OAuth 2.0 cho phép các ứng dụng chia sẻ tài nguyên với nhau mà không cần xác thực qua username và password như cách truyền thống. Điều này giúp hạn chế những phiền toái khi phải đăng nhập username và password ở quá nhiều nơi, hoặc quá nhiều tài khoản mà không nhớ hết.
Mặc dù web là nền tảng chính cho OAuth 2, thông số kỹ thuật cũng mô tả cách xử lý loại quyền truy cập được ủy quyền này đối với các loại ứng dụng khách khác (ứng dụng dựa trên trình duyệt, ứng dụng web phía máy chủ, ứng dụng gốc/di động, thiết bị được kết nối,…
Vai trò của OAuth
OAuth xác định có bốn vai trò chính:
- Resource Owner (Chủ sở hữu tài nguyên): Chủ sở hữu tài nguyên là người dùng có khả năng cấp quyền truy cập vào tài khoản của họ. Ví dụ: Bạn muốn chia sẻ các thông tin như email, ngày sinh, giới tính, địa chỉ lên một trang web nào đó có thể đăng nhập bằng Facebook. Những thông tin này chính là tài nguyên cần chia sẻ và bạn chính là Resource Owner.
- Client: Client 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ó thể làm như vậy, client phải được người dùng ủy quyền và ủy quyền phải được xác thực bởi API.
- Resource Server: Lưu trữ các tài khoản người dùng được bảo vệ.
- Authorization Server: Authorization Server xác minh danh tính của người dùng sau đó cấp mã access token thông báo truy cập cho ứng dụng. Đôi khi Authorization Server cũng chính là resource server.
Token là một đoạn mã được sinh ra ngẫu nhiên bởi Authorization Server khi có yêu cầu được gửi đến từ Client. Có 2 loại token: Access token và Refresh token.
Cách hoạt động của Oauth2
Ở cấp độ cơ bản nhất, trước khi có thể sử dụng OAuth 2.0, Client phải có thông tin đăng nhập riêng, client ID và client secret từ Authorization Server để nhận dạng và xác thực chính nó khi yêu cầu mã Access token.
Sử dụng OAuth 2.0, các yêu cầu truy cập do client khởi tạo, ví dụ như ứng dụng dành cho thiết bị di động, trang web, ứng dụng TV thông minh, ứng dụng dành cho máy tính để bàn,… yêu cầu mã token, trao đổi và phản hồi tuân theo quy trình chung sau:
- Client yêu cầu ủy quyền (Authorization Request) từ Authorization Server, cung cấp client ID và secret làm nhận dạng. Đồng thời, cũng cung cấp các scope và endpoint URI (redirect URI) để gửi Access Token hoặc Authorization Code.
- Authorization Server xác thực client và xác minh rằng scope yêu cầu được cho phép.
- Resource owner tương tác với Authorization Serve để cấp quyền truy cập.
- Authorization Server chuyển hướng trở lại client bằng Authorization Code hoặc Access Token, tùy thuộc vào loại. Refresh Token cũng có thể được return.
- Với Access Token, client yêu cầu quyền truy cập vào tài nguyên từ máy Resource server.
Các loại tài trợ trong OAuth 2.0
Ư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.
- Được 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 một số trang web chứ không phải một.
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, 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, grant là tập hợp các bước mà client phải thực hiện để có được quyền truy cập vào tài nguyên. Authorization framework cung cấp một số loại grant để giải quyết các tình huống khác nhau như:
Authorization Code grant: Authorization server trả lại Authorization Code sử dụng một lần cho client, sau đó được đổi lấy Access Token. Đây là tùy chọn tốt nhất cho các ứng dụng web truyền thống, nơi việc trao đổi có thể diễn ra một cách an toàn ở server. Authorization Code có thể được sử dụng bởi ứng dụng Single Page (SPA) và ứng dụng dành cho thiết bị di động/ứng dụng gốc.
Tuy nhiên, client secret không thể được lưu trữ an toàn ở đây, do đó việc xác thự trong quá trình trao đổi bị giới hạn ở việc sử dụng client id riêng. Một giải pháp thay thế tốt hơn là Authorization Code with PKCE grant.
Implicit Grant: Đây là quy trình đơn giản hóa, trong đó Access token được trả lại trực tiếp cho client. Trong Implicit flow, authorization server 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, hiện nay mã token không được sử dụng nữa do khả năng bị rò rỉ mã thông báo cao.
Authorization Code Grant with Proof Key for Code Exchange (PKCE): Quy trình ủy quyền này tương tự như Authorization Code grant, nhưng có thêm các bước bổ sung giúp an toàn hơn cho các ứng dụng di động, các native app và SPA.
Resource Owner Credentials Grant Type: Grant này yêu cầu client trước tiên phải có được thông tin đăng nhập của resource owner, được chuyển đến Authorization Server. Do đó, được giới hạn ở những Khách hàng hoàn toàn đáng tin cậy.
Resource Owner Credentials Grant Type có ưu điểm là không liên quan đến chuyển hướng đến Authorization server, vì vậy nó có thể áp dụng trong các trường hợp sử dụng mà chuyển hướng không khả thi.
Client Credentials Grant Type: Được sử dụng cho các ứng dụng không có sự tương tác. Ví dụ: Các quy trình tự động, microservices,… Trong những trường hợp này, ứng dụng được xác thực theo từng ứng dụng bằng cách sử dụng client id và secret.
Refresh Token Grant: Quy trình liên quan đến việc trao đổi Refresh Token lấy Access Token.
Lời kết
Trên đây là những thông tin Vietnix 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é.