2009-04-17 11 views
28

Công ty của tôi phát triển và bán một ứng dụng SaaS có hàng trăm khách hàng. Một số khách hàng của chúng tôi đã yêu cầu chúng tôi hỗ trợ tích hợp LDAP để xác thực tài khoản người dùng dựa trên hệ thống hiện có của họ thay vì phải tạo một tài khoản đăng nhập khác cho từng nhân viên của họ. Có vẻ như điều này được gọi là Đăng nhập một lần (SSO) ở nhiều nơi? Đương nhiên hệ thống của chúng tôi đã có một cơ chế để duy trì hồ sơ tài khoản người dùng và xác thực các tài khoản người dùng đó từ trang đăng nhập của chúng tôi.Làm cách nào để tích hợp LDAP cho ứng dụng web của tôi?

Chúng tôi có chút không biết gì về LDAP và bị nhầm lẫn về một vài điều. Vui lòng giải thích việc sử dụng sai thuật ngữ có thể xảy ra (hãy nhớ, chúng tôi có chút không biết gì về điều này).

Chúng tôi nghĩ rằng chúng tôi hiểu những điều cơ bản về cách thức này có thể làm việc:

  • khách hàng của chúng tôi cấu hình tài khoản của họ để "bật" các "xác thực từ xa" tính năng cho tài khoản của họ. Họ cung cấp URL từ xa sẽ xác thực người dùng của họ.
  • Người dùng truy cập trang đăng nhập của chúng tôi và thử đăng nhập bằng tên người dùng và mật khẩu được cung cấp bởi hệ thống LDAP của công ty họ.
  • Trang đăng nhập của chúng tôi sẽ chuyển tiếp an toàn thông tin xác thực đăng nhập (có thể được mã hóa và được băm nhỏ theo một số định dạng đã thỏa thuận) thành URL "xác thực từ xa" do khách hàng của chúng tôi cung cấp.
  • Tập lệnh của khách hàng sẽ xác thực người dùng và sau đó chuyển hướng họ trở lại trang web của chúng tôi với "trạng thái xác thực".
  • Trang của chúng tôi sẽ phân tích "trạng thái xác thực" và chấp nhận người dùng đã đăng nhập hay không.

Giả sử thông tin trên thậm chí còn bán chính xác, chúng tôi vẫn sẽ cần mỗi người dùng có tài khoản trong hệ thống của chúng tôi. Chúng ta sẽ không cần một số cách để đồng bộ hóa hồ sơ tài khoản người dùng của chúng tôi với các hồ sơ người dùng trong thư mục LDAP? Đây có phải chỉ đơn giản là "ID bên ngoài" tham chiếu ID của người dùng trong hệ thống LDAP không? Sau đó, có yêu cầu rằng tập lệnh "xác thực từ xa" của khách hàng phải cung cấp ID đó cho hệ thống của chúng tôi để chúng tôi biết tài khoản người dùng nào trong hệ thống của chúng tôi liên kết thông tin đăng nhập với?

Chúng ta đang thiếu gì?

BTW, nền tảng của chúng tôi là IIS, ASP.Net 2.0, và SQL Server 2005.

Trả lời

9

Có một số tùy chọn. Nếu bạn thực sự có nghĩa là LDAP, trái ngược với Active Directory, tôi có lẽ sẽ xem xét sử dụng System.DirectoryServices.Protocols để thực hiện một ràng buộc LDAP bằng cách sử dụng các thông tin được cung cấp thông qua một kênh an toàn.

Nghiêm túc, đây không phải là Đăng nhập một lần. SSO có nghĩa là chỉ phải gửi tín dụng của bạn một lần khi bạn đăng nhập lần đầu tiên. Điều này chỉ đơn giản là làm giảm sự phức tạp cho người dùng bằng cách chỉ có một ID duy nhất. Thông thường, đối với các máy khách Windows trong một môi trường doanh nghiệp với một hỗn hợp của các nền tảng và công nghệ, SSO được thực hiện bởi một máy khách được thêm vào máy tính để bàn quản lý xác thực cho các hệ thống khác nhau. Trong môi trường chỉ có MS, bạn có thể đạt được SSO nếu tất cả các ứng dụng web của bạn đang sử dụng IIS, bạn sử dụng IE và sử dụng Xác thực Windows tích hợp, mạo danh và tất cả những thứ đó.

Bạn có thể xem xét tự động đăng ký người dùng đã được xác thực vào hệ thống của mình, trừ khi bạn yêu cầu định cấu hình dữ liệu hồ sơ. Nếu bạn yêu cầu cấu hình trước người dùng, bạn có thể cân nhắc việc nhập khẩu thường xuyên (tất cả hoặc tập hợp con của) người dùng từ thư mục LDAP và đưa họ vào trạng thái không được định cấu hình, chẳng hạn như quản trị viên chọn từ danh sách hiện tại không người dùng được định cấu hình thay vì nhập ID. Nếu không, bạn có nguy cơ quản trị viên của mình nhập sai ID người dùng và có sự không khớp.

Bạn có thể cung cấp một API để giải pháp Quản lý danh tính và truy cập (cho Microsoft nghiêng, xem ILM2 007 làm ví dụ) có thể tích hợp với hệ thống của bạn và thực hiện tất cả quản lý tài khoản người dùng cho bạn.

1

Bạn cần phải quyết định làm thế nào bạn có kế hoạch để liên kết người dùng LDAP vào tài khoản trong ứng dụng của bạn. Ví dụ: bạn có thể yêu cầu tên người dùng trong hệ thống LDAP khớp với tên người dùng trong ứng dụng của bạn hoặc bạn có thể yêu cầu người nào đó chỉ định rõ tên người dùng LDAP trong mỗi tài khoản người dùng trong ứng dụng của bạn.

Khi bạn đã tìm thấy liên kết đó, bạn có thể chỉ cần thực thi ràng buộc LDAP để kiểm tra thông tin đăng nhập của người dùng.

3

Như luôn nhớ để xác thực kiểm tra xác thực để đảm bảo rằng mật khẩu đã gửi không được để trống.

Một liên kết với tên người dùng và không có mật khẩu nào được coi là một liên kết Ẩn danh, theo tiêu chuẩn và có vẻ như nó đã thành công! Trong thực tế, nó thực sự không.

Đây là vấn đề để ứng dụng xử lý, vì máy chủ LDAP chỉ tuân theo tiêu chuẩn, một tiêu chuẩn gây phiền nhiễu, nhưng vẫn là tiêu chuẩn.

2

Có thể xem xét Xác thực Vs Ủy quyền

Xác thực - người dùng nào đây? Ủy quyền - ai có thể sử dụng ứng dụng, người dùng được chỉ định, nhóm?

Hiện tại, bạn đang ngụ ý ủy quyền thông qua xác thực vì chỉ những người được đăng ký ứng dụng mới được phép sử dụng nó.

Nếu bạn sử dụng một thư mục thay vì kho dữ liệu tùy chỉnh của bạn sau đó

  • sử dụng phương pháp kết nối thư mục để xác thực người dùng
  • bạn (có thể) có được xác thực cho tự do - thì người dùng biết đến cửa sổ, cửa sổ có thể xác định iis và sqlserver, có thể không cần phải hỏi người dùng là ai.
  • bạn sẽ biết nhiều người dùng hơn có ủy quyền và cần áp dụng các hạn chế - giới hạn kết nối với một nhóm cụ thể.
  • có thể lưu trữ dữ liệu người dùng trong thư mục, thay vì với dữ liệu ứng dụng của bạn trong máy chủ sql.

Nếu người dùng của bạn thực sự muốn LDAP chung, sau đó bạn muốn xem xét (C) ldap_connect, ldap_bind_s (C#) LDAPConnection System.DirectoryServices.Protocols

Hoặc một lần nữa trở lại với AD Demystified .Net App single sign on này có thể giúp

1

Cách làm việc này trong hệ thống của chúng tôi:

  • Khi người dùng điều hướng đến các ứng dụng web, biến máy chủ REMOTE_USER được giả định là người sử dụng thẻ
  • Mã đăng nhập kết nối vào thư mục ldap với một tài khoản tìm kiếm cụ thể
  • Mã đăng nhập tìm kiếm một ldap chiếm rằng "trận đấu" các REMOTE_USER
  • Mã đăng nhập sau đó cố gắng để phù hợp với tài khoản đó với một tài khoản trong hệ thống của chúng tôi
  • Nếu khớp có thể tất cả các cách thức thông qua, giả sử người dùng đăng nhập như tài khoản phù hợp, tiếp tục bình thường

bằng cách này, người dùng có thể tái sử dụng xác thực các cửa sổ miền của họ bên trong ứng dụng của chúng tôi.

1

Dưới đây là một phần mềm hữu ích cho phép truy cập thư mục LDAP qua web, sử dụng JSON-RPC: Json2Ldap