2009-07-31 32 views
6

Tôi có một vài trang web dành cho công việc sống bên ngoài mạng LAN của công ty - và do đó nằm ngoài phạm vi giao tiếp trực tiếp của Active Directory (A/D) - nhưng tôi muốn có thể xác thực người dùng chống lại các máy chủ A/D của công ty cũng như kho lưu trữ thứ cấp của người dùng/vai trò ***. Mã giả cho hoạt động này là:Làm cách nào để xác thực đối với Active Directory từ mã dịch vụ web ASP.NET?

  1. Người dùng nhập tên người dùng/mật khẩu vào biểu mẫu đăng nhập của trang web bên ngoài.
  2. Trang web bên ngoài gọi một dịch vụ web bên trong mạng LAN có thể nói chuyện với A/D.
  3. Kiểm tra webservice để xem liệu tên người dùng/mật khẩu có thể được xác thực ánh xạ tới người dùng trong A/D hay không. Nếu có, hãy trả về danh sách các vai trò A/D mà người dùng là thành viên.
  4. Nếu không thể tìm thấy/xác thực tên người dùng/mật khẩu đối với A/D, hãy kiểm tra cơ sở dữ liệu/dịch vụ là kho lưu trữ thứ cấp của thông tin người dùng/vai trò. Trả về tất cả các vai trò sử dụng nếu chúng xác thực dựa trên máy chủ auth thứ cấp.
  5. Trả lại danh sách các vai trò mà người dùng đang truy cập vào trang web gọi điện.

*** Ý tưởng là chúng tôi không muốn đặt hàng chục - có khả năng hàng trăm nhà thầu và chi nhánh vào Active Directory khi tất cả họ sẽ chỉ đăng nhập vào máy chủ web bên ngoài của chúng tôi. Do đó, lược đồ auth thứ cấp.

Trả lời

1

Tôi nghĩ có một vài lớp ở đây, mỗi một câu hỏi riêng của mình:

Làm thế nào tôi có thể nhận được một dịch vụ web trong mạng LAN của tôi từ DMZ?
Đây là một điều khó khăn vì nó thực sự phá vỡ khái niệm về sự phân tách DMZ/LAN. Nói chung kết nối giữa LAN và DMZ chỉ được phép (và trên cơ sở hạn chế) từ phía LAN - theo cách này, DMZ không thể bắt đầu liên lạc với mạng LAN và cực kỳ bị hạn chế trong những gì nó có thể làm (nó không thể yêu cầu tùy ý, chỉ trả lời các yêu cầu từ mạng LAN).

Tôi làm cách nào để sử dụng dịch vụ trên máy tính khác để xác thực tên người dùng/mật khẩu?
Một lần nữa đây là một vấn đề dính - bạn đang chuyển mật khẩu qua mạng - có thể cho chúng bị chặn không. Với AD, giải pháp này được giải quyết bằng kerberos - một hệ thống thử thách/phản hồi đảm bảo mật khẩu không bao giờ thực sự được truyền đi. Tất nhiên các kerberos và các protocals tương tự khá phức tạp - bạn không nên cố gắng cuộn nó vì nó có thể kém an toàn hơn khi sử dụng thứ gì đó hiện có - ví dụ: webservice của bạn có thể hoạt động trên https, để ít nhất các mật khẩu chỉ là chữ thô trên hai máy chủ, và không phải là liên kết truyền thông inbetween. Chứng chỉ cũng có thể được sử dụng để ngăn chặn lưu lượng truy cập dành cho mạng LAN từ máy định tuyến DMZ (máy DMZ được phân biệt sẽ không thể giả mạo chứng chỉ và hệ thống của bạn có thể xác định nó được kết nối với máy chủ giả trước đây) gửi chi tiết để xác thực)

Theo kinh nghiệm của riêng tôi, các vấn đề này dẫn đến AD ngoài mạng LAN không được thực hiện. Các công ty chọn hoặc không nhận người bên ngoài trên mạng LAN bằng VPN được xác thực bằng khóa RSA (những móc khóa nhỏ cho thấy số lượng thay đổi liên tục) hoặc họ sử dụng bộ đăng nhập riêng biệt cho dịch vụ khu vực DMZ.

+0

Máy chủ web "bên ngoài" nằm trong DMZ và không thể truy cập trực tiếp vào máy chủ A/D. Tuy nhiên, có một quy tắc tường lửa cho phép lưu lượng truy cập cổng 80/443 từ IPAddresses DMZ cụ thể của máy chủ web bên ngoài đến địa chỉ cổng/IP cụ thể của máy chủ ứng dụng nội bộ (asp.net). Trong tương lai, chúng tôi có thể đồng bộ hoàn toàn các máy chủ ngoại vi, nhưng cùng một ngoại lệ tường lửa bởi cổng và IP sẽ vẫn cho phép các máy chủ web bên ngoài gọi các cuộc gọi dịch vụ web trên máy chủ ứng dụng nội bộ. –

1

Bạn có thể muốn xem qua hai tài nguyên này. Đầu tiên sẽ cung cấp cho bạn mọi thứ bạn muốn biết về thư mục hoạt động và thư mục thứ hai sẽ chỉ cho bạn cách kết nối.

Bạn có thể có những thách thức kết nối với máy chủ AD từ xa mặc dù. Vì vậy, như một công việc tiềm năng xung quanh, tôi sẽ xem xét việc có ứng dụng web gọi một webservice xác thực nằm trên mạng công ty.

+0

Tôi nghĩ bạn có ý định tách các liên kết: http://www.codeproject.com/KB/system/everythingInAD.aspx http://msdn.microsoft.com/en-us/library/aa302397.aspx –

+0

yeah nhưng tôi chỉ cho phép một liên kết ngay bây giờ và cả hai đều cần thiết. Tôi thấy cả hai đều cực kỳ hữu ích cho việc thực hiện một vấn đề tương tự như tôi đã có. – andrewWinn

0

Bạn có thể đơn giản hóa việc này bằng cách cung cấp cổng thông tin đăng nhập khác cho các nhà thầu/chi nhánh.

+0

Các ứng dụng được đề cập sẽ được cả người dùng nội bộ (A/D) và người dùng bên ngoài (không phải A/D) sử dụng. Một đăng nhập phải xử lý cả hai kịch bản. –

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