Avatar
1
Hihi Teacher
Hihi Teacher
2FA - Tích hợp xác thực TOTP với Spring Security
Hi mọi người.hiện tại em đang có ý định làm chức năng xác thực (2FA)-TOTP tích hợp với Spring Security.

Em có tìm hiểu 1 số bài hướng dẫn nhưng các bài đó  vẫn đúng ý em lắm.Em chưa tìm ra  hướng làm nên em lên đây mong nhận được sự giúp đỡ của mọi người ạ.

Em muốn Spring Security xác thực theo các bước sau ạ

  1. Bước 1 : Người dùng gửi username/password nếu đúng thì chưa set user đó vào security context và chưa trả về client JSESSIONID như bình thường mà redirect về một view hiển thị thêm 1 input là code và yêu cầu người dùng phải nhập thêm code nữa mới login thành công.
  2. Bước 2 : Người dùng nhập  code (lấy ở GG Authenticator App ) và submit.Nếu code đúng thì set user đó vào security context và trả về client JSESSIONID như thường lệ.

Em thấy 1 số hướng dẫn người ta input username/passwordcode submit chúng chung 1 lần.Nhưng em muốn là đúng username/password trước nếu đúng rồi  sau đó mới submit code lên để xác thực .Nếu code đúng thì mới tính là đăng nhập thành công.

Mọi người cho em biết  hướng để xử lý tình huống này với ạ.Em nghĩ là phải custom 1 trong các thứ như là UsernamePasswordAuthenticationFilter hoặc AuthenticationProvider có đúng ko ạ ?

Mong nhận được sự giúp đỡ và gợi ý của mọi người.Em cảm ơn !

  • Answer
spring boot spring security
Remain: 5
1 Answer
Avatar
tvd12 Teacher
tvd12 Teacher
  1. Spring security dùng cho những trường hợp phức tạp như thế này khá khó em ạ. Thế nên anh đã loại bỏ spring security khỏi các project của anh.
  2. Anh chỉ đơn giản là tạo ra 2 API:
  • /api/v1/login: user truyền username, password lên, nếu ok anh sẽ tạo ra one time token;
  • /api/v1/2fa: user sẽ truyền 2fa code lên, nếu ok sẽ xoá one time token và trả cho user accessToken, từ đây user có thể gọi api
  1. Nếu em vẫn cố dùng spring security thì anh cũng chưa nghĩ ra cách nào hiệu quả, vì nhìn vào schema của spring security bảng authorities anh không thấy có trường status để tận dụng. Có thể em sẽ cần tạo ra 1 bảng nữa để quản lý trạng thái của authority, tuy nhiên khi hệ thống của em có nhiều hơn 1 server thì việc quản lý trạng thái này sẽ tương đối phức tạp.

Nên kết luận là em nên tự tổ chức phần login này thay vì dùng spring security em ạ, nó quá cứng nhắc và phức tạp hơn em tự làm rất nhiều.

  • 0
  • Reply