[Hỏi] Cách sử dụng JsonWebToken để bảo mật API



  • Cảm ơn bạn nhé :D



  • Về cơ bản thì JWT nó cũng giống như việc sử dụng session thuần túy nhưng giảm thiểu số lượng request đến server.

    • Việc tạo Token thì bạn không cần mã hóa cũng được, chuỗi này có thể đặt random vài chục ký tự cùng việc set thời gian sống cho mỗi token.
    • Ở phía DB bạn lưu token bao gồm cả thông tin user luôn để sau lòa được token thì có thêm ít thông tin dùng luôn :).
    • Về token thì mình nghĩa bạn check và set time expired thui k cần xóa sau mình còn theo dõi login.
    • Nếu nói về bảo mật thì khi mất token, coi như người dùng tạch rùi :v.


  • Mình cũng mới tìm hiểu nên nhiều thứ còn chưa nắm rõ hết. Bạn giải thích giúp mình lý do cần đặt thời gian sống cho mỗi token được không? Mình thấy cứ người dùng login thì sinh token và trả lại cho họ, khi họ logout thì xóa token trong database đi, biết bao nhiêu mà đặt thời gian sống cho token?
    Cảm ơn bạn.



  • @Bui-Minh-Phong Sinh token cần có data của user A + secret key từ server, nên token đại diện cho user A đó. Khi bị lấy mất token thì rõ ràng người lấy token đó cũng chỉ sử dụng được dưới danh nghĩa của user A. Nếu ứng dụng của bạn có nhiều cái nhạy cảm thì jwt ko đảm bảo được, phải dùng thêm nhiều lớp bảo mật khác như bảo mật 2 lớp, ...
    Đặt expire time ko có nhiều ý nghĩa vì fb hay google bạn dùng có bao giờ nó bắt login lại ko nếu ko có gì đặc biệt xảy ra.
    Lưu db cũng ko cần thiết vì token linh hoạt, 1 user dùng nhiều device có thể có nhiều token, ko cần quan tâm.



  • Vậy chỉ cần decode token thành công là cho phép xử lý tiếp ak. Không lưu vào database thì giả sử user A dùng token của user B vẫn thực hiện được truy vấn ak?



  • @Bui-Minh-Phong Bạn có thể miêu tả rõ cách lưu token vào db được không. Mình cũng không thấy bảo mật nhưng không biết làm ntn ?



  • Mình đang làm là trong database lưu user thêm một trường nữa là token. Khi sinh token sẽ lưu luôn vào. Khi nhận request thì decode token thành công rồi kiểm tra xem token đó có tồn tại và ứng với user đó không thì mới xử lý tiếp.



  • @Bui-Minh-Phong em sẽ làm thêm event xóa token trong db khi logout. Mình hiểu rồi. cảm ơn bạn



  • Khi login mình sẽ xóa. Mình thấy làm thế API sẽ bảo mật hơn đôi chút rồi :D


Log in to reply