OAuth (Open Authorization) 2.0 là một chuẩn định nghĩa cách các ứng dụng thứ ba có thể access tới thông tin user và các resource liên quan đến user này trong một ứng dụng khác, là như thế nào. Nó giúp cho ứng dụng thứ ba có thể access tới các resources mà không cần biết về thông tin credentials của user sở hữu những resources đó, bằng cách sử dụng access token. Nó giải quyết một số vấn đề và giới hạn mà theo truyền thống, các ứng dụng thứ ba muốn sử dụng các resources sở hữu bởi một user nào đó, gặp phải:
- Các ứng dụng thứ ba phải store credentials của user bao gồm username và password để sử dụng cho việc authentication.
- Server cung cấp resources của user phải hỗ trợ password authentication để xác thực cho các ứng dụng thứ ba.
- Các ứng dụng thứ ba có thể access tới các resources mà không có một giới hạn nào, chúng ta không thể restrict chúng chỉ có thể access tới một số resources, hay cũng không thể restrict chúng được access resource trong khoảng thời gian bao lâu, …
- User sở hữu các resources không thể revoke access cho một số ứng dụng thứ ba, phải revoke access cho tất cả các ứng dụng này, bằng cách thay đổi password chẳng hạn.
- …
OAuth 2.0 giải quyết những vấn đề trên bằng cách introduce một lớp authorization, phân tách vai trò của các ứng dụng thứ 3 với các resources của user. Trong OAuth 2.0, các ứng dụng thứ ba request tới các resources được quản lý bởi user và provide bởi resource server. Chúng phải sử dụng access token, định nghĩa resource nào chúng có thể access, thời gian bao lâu, …, để request tới các resources. Cụ thể như thế nào? Trong bài viết này, mình sẽ giới thiệu với các bạn tổng quan về OAuth 2.0 các bạn nhé!
Điều đầu tiên mà các bạn cần phải biết là về OAuth 2.0 Role.
Nói nôm na thì Role trong OAuth 2.0 là những thành phần sẽ tham gia vào quá trình xác thực thông tin người dùng và những resource mà ứng dụng thứ ba đang cần sử dụng. Những Role này bao gồm:
- Resource owner là một thực thể có quyền grant access cho các ứng dụng thứ ba tới các resources. Nếu resource owner là con người thì resource owner chính là end-user sở hữu những resource này.
- Resource server là server chứa những resources mà các ứng dụng thứ ba cần access. Nó sẽ dựa vào access token mà ứng dụng thứ ba đang request tới resource để xác định xem ứng dụng này có quyền access tới resource hay không?
- Các ứng dụng thứ ba, hay chúng ta thường gọi là các Client Application, là những ứng dụng sẽ sử dụng access tokenn để request tới các resource được provide bởi resource server.
- Authorization server là server sẽ issue access token sau khi authenticate resource owner thành công.
Các bạn có thể xem hình vẽ sau để hiểu rõ thêm.
Trong hình vẽ trên thì Resource Owner chính là end-user, người sở hữu các resource. Client Application cũng có thể sử dụng thông tin Client ID đại diện cho chính nó để request các resources.
Thông thường, các bạn sẽ thấy Resource Server và Authorization Server sẽ là một, ví dụ như chúng ta chỉ cần sử dụng Google cho Resource Server và Authorization Server là được. Nhưng tất nhiên, chúng ta có thể tách chúng ra cũng được.
Để hình dung quá trình xác thực thông tin người dùng trong OAuth 2.0, các bạn hãy xem hình vẽ sau:
Hình vẽ trên minh hoạ trường hợp Client Application request tới một resource của user được cung cấp bởi Google.
Chúng ta sẽ truy cập tới ứng dụng mà chúng ta đang muốn sử dụng. Để có thể sử dụng resource của Google, Client Application sẽ redirect tới trang đăng nhập của Google để chúng ta đăng nhập.
Sau khi đăng nhập thành công vào Google xong, Google sẽ hỏi các bạn có cho phép ứng dụng này truy cập đến các resource của chúng ta hay không? Nếu đồng ý thì Google sẽ redirect tới Client Application với URL đã được ứng dụng này đăng ký với Google từ trước, kèm với đó là authorization code.
Khi đó, Client Application sẽ sử dụng thông tin được cung cấp bao gồm authorization code, client id, client secret để xác nhận với Google để truy cập thông tin của chúng ta ở Google.
Google khi đó sẽ trả về access token cho phép Client Application có thể access thông tin của chúng ta.
Lúc này thì Client Application có thể sử dụng resource bằng access token mà không cần xác thực nữa.
Trên đây là những thông tin cơ bản, tổng quan về OAuth 2.0, mình sẽ hướng dẫn các bạn cách hiện thực OAuth 2.0 cho ứng dụng của các bạn trong các bài viết sau, các bạn nhé!
dao
Nếu đồng ý thì Google sẽ redirect tới Client Application với URL đã được ứng dụng này đăng ký với Google từ trước, kèm với đó là authorization code
-> Nếu tại bước này, google hình như cũng không cần phải trả về authorization code và ứng dụng chỉ cần sử dụng CLIENT_ID & SECRET_KEY mà vẫn có thể truy cập đến google để lấy thông tin của chúng ta vẫn được đúng ko ad ạ?
Khanh Nguyen
Có nhiều grant type trong OAuth2. Cái mà bạn đang đề cập là grant type Client Credential đó bạn! Bạn xem thêm ở đây nhé https://huongdanjava.com/vi/cac-loai-grant-types-trong-oauth-2-0.html
Bách Nguyễn
Cám ơn tác giả đã chia sẻ bài viết này, nội dung ngắn gọn và dễ hiểu.
Tôi có một ý nhỏ về từ ngữ là: Khi xác thực người dùng thành công, Authorization Server sẽ trả về một Authorization Code, không phải là Authentication Code.
Khanh Nguyen
Cảm ơn bạn đã góp ý! Mình đã chỉnh sửa cho đúng.