Tôi có một ứng dụng ASP.NET MVC 5 sử dụng ASP.NET Identity 2.0 để xác thực người dùng.Làm thế nào để hiển thị hình ảnh xác thực sau N lần đăng nhập thất bại?
Hiện tại, người dùng buộc phải nhập hình ảnh xác thực vào mọi lần đăng nhập, nhưng nó gây ra nhiều phàn nàn về độ phức tạp của xác thực.
Mục tiêu chính là làm cho con người trở thành đăng nhập đơn giản nhất có thể, và cho một robot phức tạp nhất có thể.
Tôi quyết định hiển thị hình ảnh xác thực sau số lần cố gắng đăng nhập không thành công nhất định. Có manyalreadyaskedquestions về nó, nhưng tôi không tìm thấy câu trả lời sẽ giúp tôi xây dựng giải pháp khá hoàn chỉnh. Tôi tìm thấy điều này question về việc theo dõi không thành công, nhưng nó cũng sử dụng khóa máy, đó không phải là những gì tôi muốn. Và theo this phần trả lời của chức năng cần thiết có sẵn trong nhà cung cấp thành viên ASP.NET cũ và không có sẵn (chưa?) Trong ASP.NET Identity.
Vì vậy, tôi đã kết thúc với các thuật toán đơn giản sau đây:
- Nếu được cung cấp đăng nhập và mật khẩu cặp là đúng, sau đó đăng nhập người dùng trong
- Nếu đăng nhập hoặc mật khẩu không chính xác, sau đó ghi lại nỗ lực đăng nhập thất bại..
- Nếu ghi ba lần đăng nhập không thành công cho người dùng, sau đó hiển thị trang đăng nhập với hình ảnh xác thực.
- Nếu hình ảnh xác thực đã nhập hợp lệ, sau đó quét số lần đăng nhập không thành công, sau đó truy cập 1.
- Nếu captcha đã nhập không hợp lệ, hãy hiển thị lại trang đăng nhập bằng hình ảnh xác thực.
Câu hỏi đặt ra là: làm cách nào để có thể phân biệt các yêu cầu gửi đến theo yêu cầu cho thông tin đăng nhập cụ thể?
Tôi không thể dựa vào cookie, phiên, IP, v.v ... vì bất kỳ rô bốt nào cũng có thể thay đổi chúng. Và tôi cũng không thể dựa vào việc đăng nhập, vì đăng nhập có thể không tồn tại hoàn toàn. Cách tiếp cận rõ ràng là tạo một bảng riêng biệt để lưu trữ thông tin đăng nhập, số lần thử không thành công và dấu thời gian, nhưng rô bốt có thể dễ dàng tràn ngập thông tin đăng nhập giả, mặc dù tôi có thể giải quyết vấn đề này bằng cách xóa các mục cũ trong công việc được lập lịch.
Đây có phải là giải pháp hợp lệ không? Có cách nào tốt hơn để làm điều đó không?
Vâng, tôi đã thấy hình ảnh xác thực mới, nhưng tôi không chắc chắn cách thức hoạt động của tính năng mới này. Dù sao, cảm ơn mẹo 'UserManager'! Tôi sẽ cố gắng kết hợp 'AccessFailedAsync' và bảng tùy chỉnh cho các thông tin đăng nhập không tồn tại và chấp nhận câu trả lời của bạn khi giải quyết một giải pháp khả thi. – sigurd