Quá trình đăng nhập vào 1 hệ thống

Chào tất cả mọi người ! Hiện tại mình đang tự biuld 1 dự án sử dụng Spring Boot + Angular 5+ !
Mình đang trong khâu thiết kế và đang chưa biết quá trình để đăng nhập vào 1 hệ thống như nào và mình có nghĩ ra 1 ý tưởng như sau :slight_smile:
Nhập vào form đăng nhập => call API login (method : POST,param(userName,passWord)) => respond 1 đối tượng đăng nhập Ví dụ { “name”:“Nguyen Van A”,“Tuoi”:19 } => lưu đối tượng này vào local storage rồi dùng n trong suốt phiên làm việc
Mọi người ai đã làm thực tế rồi , có ý tưởng hay góp ý với mình với ạ !
Mình cảm ơn nha :)))))

Tìm hiểu về JWT nhé…

5 Likes

Bạn lưu thế thì giờ mình muốn hack tài khoản 1 người bất kỳ, mình sẽ tạo ra một object như của bạn rồi lưu vào local storage, sau đó truy cập vào web của bạn, vậy là mình đã “hack” thành công tài khoản của người đó!!
Bạn phải làm thế nào đó sao cho ngoài việc bị đánh cắp ra, thì mấy cái thông tin để xác định sự đăng nhập là không thể dễ dàng tạo ra được, hoặc phải là không thể tùy tiện mà tạo ra. Cái cấu trúc { “name”:“Nguyen Van A”,“Tuoi”:19 } thì ai mà chả giả mạo được?
Bạn tham khảo bài viết của Tôi Đi Code Dạo nhé:

5 Likes

E cũng biết là nếu làm như vậy sẽ dễ bị tấn công vào ss, thế nên e mới định hỏi xem có ý tưởng nào hay không ý ?a có hướng giải quyết nào k chỉ e với ạ :))

Bạn search google thử web authentication methods xem.

3 Likes

Có một kiểu đăng nhập ngày xưa hay dùng là:

  • Server dựng 1 cái csdl mini gọi là Session (Phiên làm việc);
  • Với mỗi client, dù đăng nhập hay chưa, hễ truy cập vào server thì server sẽ tạo 1 item trong session ứng với client đó, rồi nó ném về client 1 cái session id ứng với item đó, session item đó đóng vai trò là để lưu trữ “trạng thái” (state) cho user đó.
  • Sau khi user đăng nhập, nó sẽ lưu chẳng hạn isLogin = true vào cái item đó kèm ngày hết hạn, lần sau user truy cập lại thì nó lại lấy session id từ user để truy vấn csdl rồi kiểm tra
  • Ở client, session id được lưu vào cookie và được đặt cờ là httponly để tránh bị đánh cắp;

Đó có thể coi là dạng token xưa nhất.

Thời nay xu hướng mới để làm server đó là stateless - phi trạng thái, hay còn gọi là client và server chơi trò tung hứng trạng thái qua lại cho nhau.

Ở đây cơ bản để cho một thông tin không thể dễ dàng bị giả mạo mà không cần phải dựng cả session db là:

  • Server giữ một password bí mật;
  • Bạn tạo 1 cục dữ liệu data;
  • Tạo token: token = generateToken(data, password);
  • Bỏ token vào dữ liệu: response = token + data;
  • Ném cục response về cho client để client lưu vào cookie
  • Lần sau client truy cập thì cục dữ liệu sẽ được đưa lên server, giờ gọi nó là request;
  • Server kiểm tra tính tin cậy: [token, data] = extract(request); token === generateToken(data, password);

Áp dụng vào việc đăng nhập, thì chỉ cần tạo 1 dữ liệu rỗng hoặc cho kèm thông tin gì đó vào cũng được (tùy bạn, ví dụ lưu userId để còn biết user là ai), rồi làm như trên, khi user đăng nhập thì tạo 1 cái rồi chơi “tung hứng”, chỉ cần nó tồn tại và token là hợp lệ thì tức là user này có quyền truy cập.

Ở field của mình là Nodejs thì người ta hay sử dụng JWT để tạo.

7 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?