Thực hiện xác thực bằng Json Web Token trên NodeJS

Tram Ho

Json Web Token là gì ?

JSON Web Token (JWT) là một chuẩn mở (RFC 7519) định nghĩa một cách nhỏ gọn và khép kín để truyền một cách an toàn thông tin giữa các bên dưới dạng đối tượng JSON.

Thông tin này có thể được xác minh và đáng tin cậy vì nó có chứa chữ ký số. JWTs có thể được ký bằng một thuật toán bí mật (với thuật toán HMAC) hoặc một public / private key sử dụng mã hoá RSA.

Ví dụ về mã token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJjaGVjayI6dHJ1ZSwiYXV0aG9yaXphdGlvbiI6ImFkbWluIiwiaWF0IjoxNTk3NTQ2MzQyLCJleHAiOjE1OTc1NDc3ODJ9.Dqq0EEgF1xOYlnY8tVU31h9jkInztJVt8NEPEavG1ZU

Tại sao cần sử dụng Json Web Token (JWT)

Đây là 1 vấn đề quan trọng về bảo mật khi phát triển một restful api (restful api là gì).

Ví dụ: Bạn có 1 url rest api: https://domain.com/users/getAll để lấy tất cả thông tin của user trong ứng dụng. Nếu ai cũng có thể truy cập vào thì sẽ dẫn tới nhiều vấn đề bảo mật người dùng. Cho nên mới cần phải sử dụng Json Web Token để giải quyết vấn đề đó. Nào, bắt đầu thực hiện thôi.

Các bước thực hiện JWT trong Restfull Api NodeJs

  1. Setup ứng dụng NodeJs
  2. Thực hiện route để người dùng truyền username và password lên serve để đăng nhập
  3. Nếu thành công, serve random để tạo 1 mã token gửi về client
  4. Client thực hiện lưu token vào trình duyệt (cookie, sessionStorage, …)
  5. Khi thực hiện request lên serve, client gửi theo token để thực hiện vấn đề xác thực
  6. Serve nhận request từ client, xác thực xem token có đúng không, nếu đúng thì cho đi tiếp, nếu không thì dừng lại.

Xây dựng ứng dụng NodeJs cơ bản

index.js

Chạy ứng dụng bằng lệnh

Mở ứng dụng trên trình duyệt: http://localhost:4000/

Cài đặt pakeage

index.js

configurations/config.js

Vậy là cơ bản đã hoàn thiện việc setup.

Thực hiện đăng nhập

Tạo ra 1 route để sử lý việc đăng nhập, ở ví dụ này mình viết các logic bên trong route và giả sử usernam là ‘admin’ và password bằng ‘12345’ để các bạn dễ dàng theo dõi. Nhưng trong thực tế, các bạn nên viết theo mô hình MVC để code sạch sẽ, dễ bảo trì hơn nhé.

Giờ chạy để xem kết quả nhé:

Đã có token được trả về, bây giờ chỉ cần lấy token đó và lưu trên trình duyệt để sử dụng trong các request tiếp theo

Thực hiện xác thực token

Tạo ra 1 middleware để kiểm tra token

Bây giờ thử thôi nào

Trường hợp không có token:

Trường hợp có token:

Kết luận

Bài này tôi thao khảo từ topdev mong rằng bạn có thể hiểu được phần nào vấn đề xác thực Json Web Token để ứng dụng vào dự án của các bạn đảm bào việc bảo mật, an toàn. Cảm ơn các bãn đã theo dõi

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo