2008-11-15 42 views
20

Tôi khá xanh với các dịch vụ web và WCF và tôi đang sử dụng xác thực tích hợp Windows - làm cách nào để nhận tên người dùng trên giao diện phía máy chủ? Tôi tin rằng tôi phải thực hiện một hành vi tùy chỉnh, hoặc có lẽ một cái gì đó với WCF phiên? Mọi manh mối sẽ cực kỳ tiện dụng.Nhận tên người dùng Windows từ phía máy chủ WCF

Trả lời

9

Dưới đây là một đoạn mã dịch vụ cho thấy làm thế nào bạn có thể lấy và sử dụng WindowsIdentity liên quan đến việc gọi của một dịch vụ WCF.

Mã này giả định rằng bạn chấp nhận hầu hết các giá trị mặc định với cấu hình của mình. Nó sẽ làm việc mà không có bất kỳ vấn đề với các ống được đặt tên hoặc ràng buộc Net TCP.

p.Demand() sẽ xác định xem người dùng có nằm trong nhóm cửa sổ được chỉ định bởi biến permissionGroup hay không.

private static void DemandManagerPermission() 
{ 
    // Verify the use has authority to proceed 
    string permissionGroup = ConfigurationManager.AppSettings["ManagerPermissionGroup"]; 
    if (string.IsNullOrEmpty(permissionGroup)) 
     throw new FaultException("Group permissions not set for access control."); 

    AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal); 
    var p = new PrincipalPermission(ServiceSecurityContext.Current.WindowsIdentity.Name, permissionGroup, true); 
    p.Demand(); 

} 
+1

Lệnh p.Demand sẽ yêu cầu 'Thread.CurrentPrincipal' nằm trong vai trò được chỉ định VÀ có cùng tên người dùng là' ServiceSecurityContext.Current .WindowsIdentity.Name'. – Joe

-2

bạn đã thử WindowsIdentity.GetCurrent(); chưa?

+8

Điều đó cho biết danh tính dịch vụ đang chạy dưới - không phải là nhận dạng người dùng đang gọi dịch vụ – Cocowalla

49

Cố gắng nhìn vào ServiceSecurityContext.Current.WindowsIdentity

5

Để có được tên người dùng gọi WCF Service:

var callerUserName = ServiceSecurityContext.Current.WindowsIdentity.Name;

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