12/08/2018, 16:11

Xây dựng API login sử dụng các dịch vụ mạng xã hội: Facebook, Twitter, Google

Ngày nay khi sử dụng một web/app ta không còn xa lạ gì với việc có thể đăng nhập vào hệ thống bằng nhiều cách khác nhau. Cách truyền thống là login bằng email hoặc username kết hợp cùng password. Và một cách khác là đăng nhập sử dụng xác thực với một bên thứ 3 ví dụ như là Facebook, Twitter, ...

Ngày nay khi sử dụng một web/app ta không còn xa lạ gì với việc có thể đăng nhập vào hệ thống bằng nhiều cách khác nhau. Cách truyền thống là login bằng email hoặc username kết hợp cùng password. Và một cách khác là đăng nhập sử dụng xác thực với một bên thứ 3 ví dụ như là Facebook, Twitter, Google... Lý do để tạo ra nhiều cách đăng nhập như thế này thứ nhất là để thêm phương án lựa chọn cho người dùng thứ 2 là để người dùng có thể tận dụng các tài khoản mạng xã hội để đăng nhập vào hệ thống mà không cần phải nhớ quá nhiều tài khoản, vừa tiện dụng vừa đảm bảo an toàn bảo mật. Vậy thì hôm nay chúng ta sẽ cùng tìm hiểu cách để tạo các API để đăng nhập bằng các dịch vụ bên thứ 3: Facebook, Twitter, Google... Let's go!

Có rất nhiều cách để thiết kế API nhưng phổ biến và được dùng nhiều nhất là RESTful API. Vì RESTful API không sử dụng session và cookies nên để authentication ta sử dụng đến JSON Web Token. Để hiểu rõ hơn về RESTful API và JWT thì trên viblo đã có rất nhiều bài viết về chủ đề này, các bạn có thể tìm hiểu thêm. Trong phạm vi bài viết này mình sẽ sử dụng RESTful API và JWT để xây dựng API login với Facebook, Twitter và Google. Trước hết ta cần hiểu cơ chế authen của JWT, về cơ bản và dễ hiểu nhất mình xin phép quote đoạn kịch bản authen sau:

Authentication: Đây là kịch bản phổ biến nhất cho việc sử dụng JWT. Một khi người dùng đã đăng nhập vào hệ thống thì những request tiếp theo từ phía người dùng sẽ chứa thêm mã JWT, cho phép người dùng quyền truy cập vào các đường dẫn, dịch vụ, và tài nguyên mà cần phải có sự cho phép nếu có mã Token đó. Phương pháp này không bị ảnh hưởng bởi Cross-Origin Resource Sharing (CORS) do nó không sử dụng cookie.

Mình xin được mượn tạm hình ảnh về flow login sử dụng jwt trên trang chủ của nó (Link) để giải thích một chút về kịch bản vừa quote ở trên             </div>
            
            <div class=

0