2009-02-24 41 views
5

Trang web tôi đang phát triển sẽ cho phép người dùng đăng nhập ở 3 cấp độ là gì.Cách tốt nhất để phát triển hệ thống đăng nhập/xác thực tùy chỉnh trong ASP.NET

Cấp 1 - Chưa đăng nhập

Cấp 2 - Họ đăng ký địa chỉ email và nhận email xác nhận và đăng nhập theo cách đó.

Cấp 2 - Họ đăng nhập bằng tên người dùng/mật khẩu, sau đó được gửi đến dịch vụ web. Nếu dịch vụ web quay trở lại với kết quả "đăng nhập thành công", họ sẽ đăng nhập vào trang web.

Tùy thuộc vào cấp độ đăng nhập, một số trang web sẽ khả dụng trong khi các trang khác sẽ bị hạn chế.

Câu hỏi của tôi là, tôi nên phát triển điều này như thế nào?

Tôi đang thực hiện dự án trong ASP.NET MVC.

Tôi có nên chỉ mã Tài khoản của riêng mình không? Tôi có nên sử dụng .NET Forms Authentication không? Lợi ích của Xác thực biểu mẫu chỉ là thực hiện thủ công với mã .NET là gì?

Nếu tôi tự làm điều này, khi đăng nhập thành công, tôi chỉ lưu trữ người dùng đã đăng nhập trong biến phiên. Có bất kỳ tác hại nào trong việc thực hiện việc này hay cho những gì tôi đang làm, liệu có ổn không?

+0

Phương pháp xác thực bạn đang xem là gì? – Suroot

+0

Tại thời điểm này, tôi đang xem xét việc tạo Tài khoản của riêng mình từ đầu, với phương thức "Đăng nhập", chấp nhận "địa chỉ email" làm thông số. Nếu địa chỉ email nằm trong DB, nó sẽ đặt biến phiên "CurrentUser" thành bản ghi DB đó. Có lý do nào để không thực hiện theo cách này không? – Jonathan

Trả lời

1

Tôi khuyên bạn nên mạnh mẽ chống lại hệ thống xác thực của riêng bạn. .net Forms auth rất dễ sử dụng; tại sao bạn sẽ lãng phí thời gian xây dựng nó cho mình? Có rất nhiều cạm bẫy đối với các hệ thống xác thực và trừ khi bạn là MS, bạn thực sự không có tài nguyên để xây dựng và thử nghiệm một.

Xác định những trang mà người dùng có thể xem là ủy quyền và bạn chắc chắn có thể mã theo cách của riêng bạn. Tôi sẽ đề nghị xem xét các giao diện Identity/Principal có sẵn trong .net và ghi đè lên phương thức "IsInRole" để đáp ứng nhu cầu của bạn.

Phiên không thực sự tốt cho bảo mật. Chúng không hoạt động tốt trong các kịch bản trang trại và khi nhóm ứng dụng quyết định tái chế ... tất cả người dùng của bạn đã đăng xuất. .net form auth sử dụng cookie theo mặc định.

+0

Tôi nói rằng sẽ dễ dàng hơn để triển khai hệ thống của riêng bạn hơn là cố gắng hiểu cách hoạt động của tư cách thành viên ASP.NET. Hơn nữa, tôi không muốn hàng trăm bảng không cần thiết, xem và lưu trữ các thủ tục hỗ trợ thành viên ASP.NET để cư trú trong cơ sở dữ liệu của tôi. – User

0

Trong trường hợp của bạn, tôi khuyên bạn nên sử dụng Xác thực biểu mẫu đơn giản. (Xem How to: Implement Simple Forms Authentication). Một LoginController đơn giản có thể xử lý việc này.

Không có gì "sai" về việc lưu trữ dữ liệu hồ sơ người dùng trong Phiên, nhưng điều này có thể dẫn đến các vấn đề về khả năng mở rộng nếu bạn cần cân bằng tải trang web của mình. Phương pháp được khuyến nghị là triển khai RoleProvider tùy chỉnh. (Xem Implementing a Role Provider.)

Để kiểm soát truy cập, có lẽ bạn có thể có lớp BaseController kiểm tra vai trò hiện tại của người dùng để xem loại truy cập nào họ có.

1

Tôi cho rằng cách tốt nhất để viết tùy chỉnh thành viên/hệ thống xác thực tùy chỉnh của bạn là sử dụng lớp MembershipProvider tích hợp trong .NET và tạo lớp tùy chỉnh của riêng bạn từ đó.Bạn luôn có thể tạo Nhà cung cấp tư cách thành viên của riêng bạn bằng cách thừa kế từ các lớp học System.Web.Security.MembershipProvider (và RoleProfile!) Trong khuôn khổ .NET và cung cấp triển khai cụ thể của riêng bạn. Bằng cách này, bạn sẽ có được lợi ích của việc sử dụng "khung cơ sở" vững chắc và đáng tin cậy để xây dựng hệ thống xác thực và ủy quyền của bạn.

Bằng cách tạo ra nhà cung cấp thành viên tùy chỉnh theo lớp cơ sở của khung công tác, bạn có thể tận dụng nhiều tính năng tuyệt vời của hệ thống thành viên ASP.NET được tích hợp sẵn, chẳng hạn như ủy quyền khai báo trong tệp web.config và được xây dựng trong ASP.NET xác thực vé. Tôi đã trả lời một câu hỏi rất giống nhau here để nêu chi tiết một số lợi ích này.

Tôi phải thừa nhận, một điều tôi thấy không bình thường do thiếu sót trong các nhà cung cấp thành viên "chuẩn" được tích hợp trong ASP.NET là thiếu một cách đơn giản cho phép người dùng đăng ký với trang web chứ không phải " xác nhận "tài khoản của họ ngay lập tức, nhưng gửi cho người dùng một email có chứa" liên kết xác thực "mà họ phải nhấp vào trước khi được phép truy cập vào trang web. Trong khi đây không phải là một tính năng tiêu chuẩn trong lớp ASP.NET MembershipProvider, nó tương đối dễ thực hiện.

Có một loạt lớn các bài báo Scott Mitchell về thành viên, Vai trò và hồ sơ nhà cung cấp ASP.NET (bao gồm một trên xác nhận tài khoản qua email trước khi cho phép đăng nhập) có thể được tìm thấy ở đây:

Examining ASP.NET 2.0's Membership, Roles, and Profile

sẽ giúp ích nếu bạn lấy được nhà cung cấp tùy chỉnh của riêng bạn từ nhà cung cấp ASP.NET.

Các vấn đề liên quan