2012-03-06 31 views
7

Tôi có dịch vụ xác thực cửa sổ. Sử dụng mã sau đây, tôi có thể nhận được Windows Identity của người dùng (bằng cách sử dụng máy khách) tiêu thụ dịch vụ.Hiểu về Xác thực Windows WCF

String currentUser = OperationContext.Current.ServiceSecurityContext.WindowsIdentity.Name; 

Cấu hình trong máy chủ là:

<binding name="messageSecurity"> 
<security mode="Message"> 
<message clientCredentialType="Windows"/> 
</security> 
</binding> 

Tôi cũng đọc rằng trong máy chủ, nó được sử dụng Kerberos để làm việc này.

Bây giờ, tôi đang cố gắng hiểu tầm quan trọng của nó trong mạng công ty của chúng tôi. Trong văn phòng, người dùng sẽ đăng nhập vào máy tính để bàn của họ bằng thông tin đăng nhập thư mục hoạt động của họ. Dịch vụ của chúng tôi được lưu trữ trong máy chủ Windows có tên "SERV1".

  1. Chỉ những người dùng có quyền truy cập (để đăng nhập) vào "SERV1" mới có thể truy cập dịch vụ? Hoặc tất cả người dùng có thể đăng nhập vào mạng văn phòng (suing thông tin thư mục hoạt động) sẽ có thể sử dụng dịch vụ?

  2. Có cách nào để đảm bảo rằng chỉ các ứng dụng được CIO phê duyệt mới có quyền truy cập dịch vụ, giữ cho dịch vụ như cửa sổ được xác thực không?

  3. Kiểm tra xác thực này có xảy ra cho mỗi cuộc gọi hoạt động dịch vụ hay chỉ cho cuộc gọi đầu tiên?

  4. Có cách nào dịch vụ có thể biết thông tin đăng nhập cửa sổ của người dùng không?

Lưu ý: Điều tôi hiểu là WindowsAuthentication có thể được so sánh với nhà cung cấp thành viên - cung cấp tên người dùng và mật khẩu từ vị trí tập trung. Nó có thể được so sánh với ASP.Net Membership Provider hoặc Active Directory Membership Provider.

Đọc thêm:

  1. ASP.NET Active Directory Membership Provider and SQL Profile Provider

  2. wcf data contracts authorization

  3. http://www.theserverside.net/tt/articles/showarticle.tss?id=ClaimsBasedSecurityModel

+2

Đây là một bài đăng rất hay minh họa cách bạn có thể sử dụng các Nhóm AD để hạn chế quyền truy cập vào dịch vụ: http://stackoverflow.com/a/5136551/29407 –

+0

@Darin. Cảm ơn. Tôi hy vọng rằng liên kết là cho câu hỏi thứ hai của tôi. Bạn có thể vui lòng trả lời các câu hỏi khác không? Ngoài ra (đối với câu hỏi số 2), tôi không cố gắng hạn chế quyền truy cập dựa trên vai trò; nhưng khách hàng. – Lijo

Trả lời

9

có thể chỉ những người dùng có quyền truy cập (đăng nhập) để “SERV1” truy cập vào dịch vụ?

Có - đó là điểm sử dụng thông tin đăng nhập Windows trong dịch vụ WCF. Chỉ những người dùng có tài khoản miền trong miền Active Directory đó (hoặc một tên miền riêng biệt có mối quan hệ tin cậy đầy đủ hai chiều với tên miền của bạn) mới có thể truy cập dịch vụ.

Hoặc tất cả người dùng có thể đăng nhập vào mạng lưới văn phòng (khởi kiện thông tin thư mục đang hoạt động) sẽ có thể tiêu thụ các dịch vụ?

Ranh giới an ninh WCF là Active Directory Domain - không phải là một máy chủ cụ thể.

Có cách nào để đảm bảo rằng chỉ CIO đã được phê duyệt các ứng dụng sẽ được truy cập vào dịch vụ, giữ cho dịch vụ như cửa sổ chứng thực?

Làm thế nào là những "CIO chấp thuận" ứng dụng khác nhau từ những người khác? WCF được truy cập bởi tài khoản - thường là tài khoản người dùng. Bạn có thể giới hạn những tài khoản nào có quyền truy cập vào dịch vụ của bạn (ví dụ: yêu cầu các tài khoản đó phải là thành viên của một nhóm AD nhất định hoặc một cái gì đó). Bạn có thể không thực sự "giới hạn" dựa trên các ứng dụng (chỉ khi những ứng dụng sử dụng các tài khoản cấp ứng dụng cụ thể để truy cập vào dịch vụ WCF của bạn)

Liệu kiểm tra xác thực điều này xảy ra cho mỗi cuộc gọi hoạt động dịch vụ hoặc chỉ dành cho người đầu tiên gọi điện?

Phụ thuộc vào dịch vụ của bạn - nếu bạn sử dụng một mỗi gọi dịch vụ WCF, sau đó kiểm tra xảy ra cho mỗi cuộc gọi. Nếu bạn sử dụng dịch vụ mỗi phiên WCF với "đàm phán bảo mật" được bật, khi đó séc sẽ diễn ra một lần vào đầu phiên và không còn nữa cho đến khi phiên kết thúc.

Có cách nào dịch vụ có thể biết thông tin đăng nhập cửa sổ của người dùng không?

Có - OperationContext.Current.ServiceSecurityContext.WindowsIdentity các chứng chỉ Windows (bản sắc Windows) sử dụng để gọi dịch vụ của bạn. Đó là nhiều hơn chỉ là tên người dùng .....

+0

Cảm ơn bạn đã giải thích rõ ràng. Một câu hỏi liên quan đến ServiceSecurityContext.WindowsIdentity. Tôi có thể lấy tên và các chi tiết khác của người dùng. Nhưng tôi có thể biết mật khẩu của người dùng không? – Lijo

+2

@Lijo: ** NO ** - có cách ** NO ** trong Windows để truy xuất mật khẩu của người dùng. –

+0

Cảm ơn bạn. Điều đó làm cho cuộc thảo luận của chúng ta hoàn tất. Tôi đánh dấu nó là đã trả lời. – Lijo

2
  1. Đó không phải là tác vụ xác thực , đó là nhiệm vụ ủy quyền. Kerberos chịu trách nhiệm đảm bảo người dùng được xác thực (tên bạn nhận được cho họ là tên thật của họ). LDAP quản lý ủy quyền. Trong bối cảnh Windows, điều đó có nghĩa là người dùng phải là thành viên của một số nhóm được phép truy cập-máy chủ-máy chủ (và dịch vụ phải kiểm tra xem đây có phải là trường hợp không).

  2. Ứng dụng? Không hẳn. Đó là để nói, có hai loại hiệu trưởng xác thực trong Active Directory: người dùng và máy tính. Nhưng tại sao việc ứng dụng đang chạy là gì, nếu người dùng đang chạy có quyền kết nối với dịch vụ không? Phrased một cách khác, bạn không thể ngăn chặn một người nào đó sử dụng mã riêng của họ để làm chính xác những gì mã của bạn sẽ làm.

  3. Không quan trọng. Việc xác thực đang hoạt động, phải không?Điều thực sự xảy ra là ứng dụng đang được thông qua một vé để chứng minh rằng người dùng đã được xác thực (tới KDC, máy chủ thư mục hoạt động).

  4. Có, ngữ cảnh bảo mật , theo một nghĩa nào đó, bộ thông tin đăng nhập của người dùng. Họ cũng có thể có các thông tin khác, nhưng bạn cũng có thể có được các thông tin đó.