2010-06-14 88 views
10

Tôi có một câu hỏi. Một khách hàng tôi đã làm một số công việc gần đây có một loạt các trang web với các cơ chế đăng nhập khác nhau. Anh đang tìm cách từ từ di chuyển sang cơ chế đăng nhập một lần cho trang web của mình (tất cả được viết bằng asp.net mvc).Nhiều trang web, Thiết kế đăng nhập một lần

tôi đang xem xét các lựa chọn của tôi ở đây, vì vậy đây là một danh sách các yêu cầu:

  1. Nó phải được an toàn (duh)
  2. Nó cần phải hỗ trợ tính sử dụng thêm vượt trội so với các tên thông thường , địa chỉ công cụ (chẳng hạn như tiền hoặc tín dụng cho người dùng)
  3. Nó phải cung cấp một bảng điều khiển quản lý người dùng tập trung để thuận tiện cho bạn (tôi hiểu rằng đây sẽ là một dự án nhỏ trên bất kỳ giải pháp thiết kế nào tôi chọn)
  4. Nó phải tích hợp với w hiện tại ebsit mà không tái kỹ thuật toàn bộ sản phẩm (Tôi hiểu rằng điều này phụ thuộc vào việc triển khai sản phẩm hiện tại).
  5. Nó phải xử lý việc gửi email cho người dùng khi anh ấy đăng ký (để anh ta kích hoạt tài khoản của mình)
  6. Nó phải giải quyết người dùng khi anh ấy nhấp vào liên kết kích hoạt tôi trong email (Tôi hiểu rằng 5 và 6 yêu cầu một số hình thức của hệ thống khuôn mẫu email để hỗ trợ các email khác nhau cho mỗi ứng dụng)

tôi đã nghĩ đến việc tạo ra một thư viện làm việc cùng nhau với hình thức xác thực cho thấy rằng bất cứ điều gì phương pháp được yêu cầu (ví dụ như đăng nhập, đăng xuất, kích hoạt, vv và một dịch vụ nhỏ gọn để thực hiện kích hoạt từ email, xử lý đăng ký, v.v.

Có tính đến tải trọng của những thứ đã được bỏ ra để làm cho câu hỏi này ngắn gọn và đến điểm, điều này âm thanh như một thiết kế tốt?

Nhưng điều này có vẻ như là một vấn đề rất phổ biến nên không có bất kỳ dự án hiện có nào mà tôi có thể sử dụng?

Cảm ơn bạn đã đọc.

Trả lời

3

Điều cơ bản cần nhận ra là bạn không thể xác thực người dùng bằng cách sử dụng Xác thực biểu mẫu chuẩn trên nhiều tên miền. Ví dụ: dev.google.com và www.google.com là các tên miền khác nhau và nếu người dùng đăng nhập vào dev.google.com, anh ấy sẽ không tự động được đăng nhập vào www.google.com trừ khi Google thực hiện điều gì đó đặc biệt để bật tính năng này. Điều này là do trình duyệt không thể truy cập cookie của một trang web khác.

Cách duy nhất để thực sự tạo dấu hiệu miền chéo trên công việc là bao gồm giá trị khóa như ID phiên trong chuỗi truy vấn của URL mà trang web kiểm tra và đặt cookie xác thực của người dùng. Bạn có thể làm điều đó theo cách thủ công thông qua trang web của bạn bằng cách sử dụng một chút mã tùy chỉnh của riêng bạn.

Ví dụ: http://www.example.com/autoLogin.aspx?sessionid=23232323

Sự nguy hiểm của phương pháp này mặc dù là ai đó có thể giả mạo một phiên người dùng bằng cách tìm ra địa chỉ đã được sử dụng bởi người sử dụng và kiểm tra ID phiên. Vì vậy, bạn cần đảm bảo giá trị được sử dụng để xác thực người dùng trên các tên miền là thời gian nhạy cảm và năng động. Đừng biến nó thành ID người dùng hoặc tên người dùng của người dùng hoặc một cái gì đó tương tự.

Bây giờ, nếu các trang web trên cùng một tên miền, bạn có thể cung cấp cho họ tất cả cùng một MachineKey và sau đó người dùng đã đăng nhập vào một trang web sẽ không bị đăng xuất khi di chuyển qua các trang web khác nhau trên cùng một tên miền.

+0

Chúng tôi đã làm điều đó thông qua một guid và cơ sở dữ liệu có một bảng "autologin" với thời gian hết hạn là 3 phút. Điều này giả định rằng tất cả các trang web có thể truy cập một cơ sở dữ liệu được chia sẻ duy nhất. – dvallejo

+0

Tôi đã sử dụng cách tiếp cận này để lấy cảm hứng và tôi đã tạo một dấu hiệu đơn trên dịch vụ sử dụng mã thông báo để đảm bảo rằng yêu cầu không bị giả mạo. nó không cần chìa khóa máy vì người dùng được chuyển tiếp (trong điều kiện thực tế hoặc minh bạch) trong dịch vụ đăng nhập và khi được xác thực thành công quay trở lại url trả về nhận mã thông báo được mã hóa và yêu cầu dịch vụ đăng nhập giải mã nó. nếu thành công, thông tin người dùng được lưu trữ trong phiên (hoặc cookie hoặc bất kỳ cơ chế lưu trữ nào được sử dụng) – Yannis

2

Nhìn vào mô hình Nhà cung cấp thành viên ASP.Net.

Dưới đây là một mẫu nhỏ các liên kết đến các tài nguyên trên MSDN về điều này. Nó sẽ bao gồm tất cả các nhu cầu của bạn. Hai liên kết cuối cùng là thực hiện mẫu trong SQL. Bạn có thể dễ dàng mở rộng các trường để đáp ứng nhu cầu của bạn.

tùy chọn khác của bạn là thực hiện đăng nhập với OpenID/Windows Live hoặc tương đương.

+0

tôi biết Nhà cung cấp thành viên ASP.Net nhưng có linh hoạt cho kịch bản tôi đã đề cập không? như thế nào nó ủy quyền gửi email để xác nhận vv cho ứng dụng web cơ bản? thx – Yannis

+0

E-mail phải được xây dựng trên đầu trang của nhà cung cấp. Ví dụ. http://www.c-sharpcorner.com/uploadfile/raj1979/passwordrecovery10032008150514pm/passwordrecovery.aspx có một điều khiển phục hồi ASP.Net pw mà không gửi thư điện tử. –

+0

Đã thêm ghi chú về việc sử dụng OpenID hoặc Winodws Live cho SSO. Tùy thuộc vào kịch bản của bạn, nó có thể là một lựa chọn. –

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