07/09/2018, 10:53

OpenID và OAuth Khác Nhau Như Thế Nào

OpenID và OAuth là hai khái niệm nghe có vẻ giống nhau và trên thực tế không ít bạn lập trình viên đã phải bó tay trước một câu hỏi phỏng vấn tưởng chừng như rất đơn giản đó là nêu ra sự khác biệt giữa hai khái niệm này. Một số thậm trí còn cho rằng hai khái niệm này là một. Hoặc như một câu hỏi ...

OpenID và OAuth là hai khái niệm nghe có vẻ giống nhau và trên thực tế không ít bạn lập trình viên đã phải bó tay trước một câu hỏi phỏng vấn tưởng chừng như rất đơn giản đó là nêu ra sự khác biệt giữa hai khái niệm này. Một số thậm trí còn cho rằng hai khái niệm này là một. Hoặc như một câu hỏi biến thể khác đó là đăng nhập bằng tài khoản Facebook/Google sử dụng OpenID hay OAuth hay cả hai? Nếu bạn không tìm được câu trả lời rõ ràng cho một trong các câu hỏi trên thì hãy tiếp tục đọc vì ngay trong phần dưới đây chúng ta sẽ đi vào chi tiết tìm hiểu về OpenID và OAuth và về sự khác nhau giữa hai khái niệm này.

Authentication và Authorization

Trước tiên chúng ta cần phân biệt rõ hai khái niệm cơ bản trong phát phần mềm đó là authentication (xác thực) và authorization (trao quyền):

  • Authentication là việc xác thực danh tính của một người nào đó. Ví dụ khi bạn thực hiện việc đăng nhập vào một tài khoản trên một website sử dụng usernamepassword thì việc đăng nhập này dùng để xác thực danh tính người dùng.
  • Authorization là việc người dùng U trao cho một ứng dụng A sử dụng các quyền của người dùng U này có trên một ứng dụng S. Ví dụ khi bạn trao quyền cho một website xem phim (ứng dụng A) quyền lấy các thông tin như email, họ và tên, ngày tháng năm sinh... của mình có trên Facebook (ứng dụng S). Tất nhiên khi đó bạn cần phải có một tài khoản Facebook trước đó.

Hiểu về hai khái niệm authenticationauthorization ở trên sẽ giúp chúng ta dễ dàng tiếp cận tới hai khái niệm là OpenID và OAuth hơn.

OpenID Là Gì

OpenID là một tiêu chuẩn mở (open standard) dùng cho việc xác thực người dùng thông qua các nhà cung cấp dịch vụ OpenID còn được gọi là OpenID provider (như Google, Facebook, Twitter...) được sử dụng trong việc xác thực. OpenID được hỗ trợ phát triển bởi tổ chức phi lợi nhuận OpenID Foundation.

Với sự phát triển của các trang mạng xã hội như Facebook, Twitter, Google Plus thì OpenID đã và đang được sử dụng phổ biến hơn trong việc xác thực người dùng. Cho tới nay thống kê số lượng các account sử dụng thông qua OpenID Provider là hơn 1 tỷ tài khoản.

OpenID là gì

Việc ứng dụng OpenID vào phát triển ứng dụng (A) về bản chất thực ra chính là việc ứng dụng A thông qua một tải khoản đã có của người dùng U được đăng ký trên OpenID provider để thay cho việc đăng ký tài khoản mới trên A. Thông qua OpenID Provider, ứng dụng A xác thực được người dùng U mà không cần phải đăng ký tài khoản trên A. Như vậy sử dụng một tài khoản duy nhất được đăng ký bởi OpenID Provider người dùng có thể sử dụng để xác thực (đăng nhập) trên nhiều ứng dụng khác nhau mà không cần đăng ký tài khoản trên từng ứng dụng này.

Khi ứng dụng A sử dụng OpenID để xác thực người dùng thì quy trình diễn ra khá đơn giản như sau:

  • Ứng dụng A chuyển tiếp người dùng về một URL của OpenID provider để đăng nhập.
  • Nếu đăng nhập thành công OpenID Provider sẽ chuyển tiếp người dùng về trang của ứng dụng A và thông báo với ứng dụng này rằng người dùng U đã được xác thực.
  • Cuối cùng ứng dụng A thực hiện việc xác thực người dùng U mà không cần đăng nhập (vì A tin vào kết quả trả về của OpenID Provider).

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).

Ví dụ như khi bạn được một ứng dụng A (hay client A) yêu cầu bạn cung cấp thông tin như email, họ và tên, nơi sinh, nghề nghiệp từ tài khoản Facebook (service provider) của bạn. Lúc này nếu bạn trao quyền cho ứng dụng A quyền lấy các thông tin trên thì Facebook service provider sẽ cho phép A lấy các thông tin này được lưu trên server của Facebook.

Ở đây quy trình sẽ diễn ra như sau:

  • Trước tiên client A cần đăng ký một tài khoản trên Facebook service provider. Sau khi đăng ký Facebook sẽ cung cấp cho Client A một Application ID và một Application secret. Facebook sẽ dựa trên App ID và App Secret xác thực được các app đã đăng ký trên trang này.
  • Khi người sau đó truy cập vào ứng dụng A và được ứng dụng này yêu cầu trao cho quyền để lấy các thông tin như email, họ tên, năm sinh... trên Facebook. Ứng dụng thực hiện việc này bằng cách chuyển tiếp người dùng về một địa chỉ trên trang Facebook service provider (Ví dụ https://www.facebook.com/v2.8/dialog/oauth?response_type=token&display=popup&client_id=145634995501895&redirect_uri=https%3A%2F%2Fdevelopers.facebook.com%2Ftools%2Fexplorer%2Fcallback&scope=email).
  • Trên trang của Facebook service provider, nếu người dùng đồng ý trao quyền, Facebook sẽ tạo ra một access token cho ứng dụng A.
  • Ứng dụng A sau đó sử dụng access token vừa lấy được ở trên cùng với application IDapplication secrete để gửi request tới Facebook lấy về các thông tin được người dùng cho phép truy cập.

Như vậy bạn thấy rằng với OpenID, ứng dụng của bạn không cần phải đăng ký trên OpenID provider mà vẫn có thể sử dụng dịch vụ của OpenID provider. Ngược lại thì với OAuth, service provider sẽ yêu cầu ứng dụng đăng ký một tài khoản trước khi có thể sử dụng dịch vụ (với sự đồng ý cho phép của người dùng).

0