Khái niệm, định nghĩa OAuth là gì?

OAuth là tiêu chuẩn mở được dùng trong việc trao quyền cho một ứng dụng (client) truy cập các dịch vụ của ứng dụng khác (service provider).

THÔNG TIN CHÍNH

Auth xuất hiện vào năm 2006, khi mà twitter phát triển hệ thống openId của họ , họ đã thống nhất nhiều bên gồm có facebook và google để thống nhất một “chuẩn” nhằm giúp cho application của bên thứ 3 có thể truy cập API của họ một cách dễ dàng hơn. Sau đó vào năm 2008, IETF (tổ chức chuyên đưa ra các chuẩn của internet) đã quyết định hỗ trợ cho chuẩn này, nhằm đưa ra một qui chuẩn thống nhất. Việc này dẫn đến bản RFC chính thức đầu tiên của oauth 1.0 vào năm 2010 (RFC 5849).

Sau đó xảy ra một sự kiện không ngờ khi có một lỗi bào mật khá nghiệm trọng xảy ra trên oauth1, gọi là session fixation. Lỗi này giúp cho attacker có thể “trick” cho một application thuộc bên thứ 3 “trao” cho hắn cái quyền để access vào account/resource của một ai đó bất kì. Bạn có thể tưởng tượng tài khoản facebook của bạn đang được ai đó ung dung sử dụng mà bạn không hề biết orz …

Sự kiện này dẫn đến sự ra đời của oauth2 vào 2012. Vào thời gian đầu thì oauth2 cũng có không ít lỗi bảo mật, ví dụ như bạn có thể sử dụng chrome để hack facebook. Cho đến hiện nay thì các chuyên gia an ninh mạng vẫn đang cảnh báo hàng ngày về các khe hở bảo mật của oauth2, tuy nhiên oauth2 vẫn được sử dụng rộng rãi.
Về cơ bản thì oauth2 không chỉ đơn thuần là một protocol mà nó là một “nền tảng” mà ở đó bạn phải implement cả phía server vẫn client. Ở dưới đây mình sẽ trình bày kĩ hơn về oauth2.

OAuth là một cách xác thực mở (open standard for authorization). Nếu bạn thấy một website (hay phần mềm) nào đó cho phép đăng nhập bằng tài khoản Facebook hay Google mà không cần tạo nick mới thì rất có khả năng đó chính là OAuth. Đây là một chuẩn xác thực mở được rất nhiều các website và phần mềm sử dụng.

Ưu điểm:
– Tiện lợi, nhanh chóng: không cần phải tạo nick mới mỗi khi đăng nhập vào một website hay phần mềm.
– An toàn: Hạn chế được tình trạng đánh cắp mật khẩu, thông tin cá nhân.

OAuth không phải là OpenID
OpenID cũng là một dạng xác thực danh tính dùng nick từ tài khoản xxx để đăng nhập vào trang yyy. Về nguyên tắc thì hai loại này giống nhau nhưng cách hoạt động của chúng thì lại khác nhau. OpenID đòi hỏi người dùng phải cung cấp thông tin cá nhân còn OAuth thì không.

Ví dụ về OAuth
Ví dụ về phần mềm Foursquare trên điện thoại, khi lần đầu mở Foursquare lên, bên cạnh việc tạo nick mới, phần mềm này sẽ cho phép bạn đăng nhập bằng tài khoản Facebook. Bạn có thể đăng nhập theo cách này mà không cần phải tạo tài khoản mới hay nhập lại thông tin đăng nhập của mình. Đó chính là bạn đang sử dụng OAuth. So với cách tạo nick mới rồi đăng nhập thì OAuth an toàn hơn vì nếu lỡ Foursquare bị hacker tấn công thì thông tin của bạn sẽ không bị đánh cắp, tài khoản Facebook cũng được an toàn.

Nếu bạn làm theo cách cũ, tức là đăng ký nick Foursuqare mới rồi đăng nhập, tức là Foursquare sẽ lưu trữ tất cả thông tin cá nhân của bạn, trong đó quan trọng nhất là email (Username) và mật khẩu. Foursquare bị hack đồng nghĩa với việc các thông tin này cũng rơi vào tay hacker. Còn khi dùng OAuth thì Foursquare sẽ không có được các thông tin cá nhân trên. Khi bạn đăng nhập bằng tài khoản Facebook thì cái mà Foursquare nhận được từ Facebook chỉ là một cái chìa khóa (token) chứa một số quyền hạn nhất định (không bao gồm quyền truy cập đến thông tin Username và Password). Cho nên nếu bị tấn công thì hacker chỉ lấy được những chìa khóa gần như vô dụng trên, còn Username và Password thì vẫn an toàn.