OAuth hiện tại đang vẫn được các nền tảng xã hội lớn như Twitter, Facebook hay Google sử dụng, vậy OAuth là gì? Cách thức hoạt động thế nào? Điểm mạnh và điểm yếu ra sao?

Khái niệm OAuth là gì?

Có thể hiểu đơn giản là OAuth là một phương thức chứng thực giúp các ứng dụng có thể chia sẻ tài nguyên với nhau mà không cần chia sẻ thông tin username và password như những cách truyền thống cũ. “Auth” là từ gồm 2 nghĩa khác nhau:

Nghĩa đầu tiên là ‘Authentication’ – nghĩa là xác thực người dùng thông qua việc đăng nhập. Nghĩa thứ 2 là ‘Authorization’ nghĩa là cấp quyền truy cập vào các Resource. Vì thế có thể hiểu là chúng ta đã đăng ký và có một tài khoản Facebook, và chúng ta sẽ dùng tài khoản này để đăng nhập ở 10-20 ứng dụng/web mà không cần mất công đăng kí hay đăng nhập.

Trong trường hợp 1 trong số 20 ứng dụng/web của chúng ta bị hack và hacker lấy được các thông tin người dùng của ứng dụng thì có phải bạn sẽ bị lộ thông tin mật trong tất cả tài khoản? Trong trường hợp này bạn cũng không phải lo lắng quá về việc sẽ mất tài khoản (username + password) Facebook vì ứng dụng bị mất của bạn chỉ được Facebook chia sẻ cho một chìa khóa (token) chứa quyền hạn nhất định và không được phép truy cập vào thông tin username cũng như password của bạn.

oauth

Cách vận hành của OAuth2

Nếu trong 1 ứng dụng/web nào đó mà bạn chọn đăng nhập bằng Facebook hay Gmail, website sẽ dẫn bạn đến trang (hoặc phần mềm) Facebook và liệt kê những quyền mà nó cần phải có để cho phép bạn đăng nhập và sử dụng dịch vụ. Nếu bạn đồng ý thì lúc này Facebook sẽ cung cấp cho ứng dụng/website một cái token, Token này chứa một số quyền hạn nhất định giúp cho website có thể xác minh bạn là ai cũng như giúp cho website có thể hoạt động được. Nếu website này bị hacker tấn công thì nó chỉ lấy được thông tin hay hoạt động của bạn trên website đó mà không ảnh hưởng đến những website khác mà bạn đang sử dụng. Do đó cách đăng nhập bằng phương thức OAuth này rất an toàn cho người dùng cuối như chúng ta.

Sơ đồ vận hành thực tế của OAuth2

Ứng dụng có thể là website hoặc app điện thoại gửi yêu cầu ủy quyền để truy cập vào Resource Server (Gmail,Facebook, Twitter hay Github…) thông qua người dùng

Nếu người dùng đồng ý ủy quyền cho yêu cầu trên, Ứng dụng sẽ nhận được ủy quyền từ phía User (dưới dạng một token string)

Ứng dụng gửi thông tin định danh (ID) của mình kèm theo ủy quyền của User tới Authorization Server

Nếu thông tin định danh được xác thực và ủy quyền hợp lệ, Authorization Server sẽ trả về cho Ứng dụng access_token. Đến đây quá trình ủy quyền hoàn tất.

Để truy cập vào tài nguyên (resource) từ Resource Server và lấy thông tin, Ứng dụng sẽ phải đưa ra access_token để xác thực.

Nếu access_token hợp lệ, Resource Server sẽ trả về dữ liệu của tài nguyên đã được yêu cầu cho Ứng dụng.

Điểm mạnh của OAuth 2.0

Với phiên bản OAuth 2.0 là một giao thức rất linh hoạt dựa trên SSL (Secure Sockets Layer đảm bảo dữ liệu giữa máy chủ web và trình duyệt vẫn giữ được tính riêng tư) để lưu token truy cập của người dùng.

Ngoài ra, OAuth 2.0 dựa trên SSL, được sử dụng để đảm bảo các giao thức bảo mật và đang được sử dụng để giữ an toàn cho dữ liệu. Nó 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.

Khả năng chia sẻ dữ liệu cho người dùng mà không phải tiết lộ thông tin cá nhân.

Dễ dàng thực hiện và cung cấp xác thực mạnh mẽ hơn phiên bản cũ

Điểm trừ của OAuth 2.0

Nếu có thêm nhiều phần mở rộng trong đặc tả hệ thống, nó sẽ tạo ra một loạt các triển khai không hỗ trợ tương tác, có nghĩa là bạn phải viết các đoạn mã riêng cho Facebook, Google, v.v.

Nếu ứng dụng/web của bạn được kết nối với trung tâm và tài khoản trung tâm bị hack, thì nó sẽ dẫn đến các ảnh hưởng nghiêm trọng trên một số trang web thay vì chỉ một.

Nguồn tham khảo: 

oauthbible.com

tools.ietf.org/html/rfc6749

oauth.net/advisories/2014-1-covert-redirect/

hueniverse.com/2012/07/26/oauth-2-0-and-the-road-to-hell/