2016-09-19 17 views
5

cho một sự hiểu biết đầu tiên, tôi đã tạo ra một dự án rất đơn giản mà cố gắng đếm số lượng tệp trong hai thư mục. User1 không được phép truy cập Directory2User2 không được phép truy cập Directory1. Do mạo danh, tôi sẽ chỉ nhận được một số, tùy thuộc vào người dùng đang gọi ứng dụng của tôi. Cả hai người dùng đều được thiết lập làm quản trị viên.Thiết lập mạo danh với ASP.NET

Vì vậy, tôi đã tạo một dự án MVC mới trong Visual Studio 2015 (chạy trên Windows 8.1) và được chọn để sử dụng xác thực Windows. Sau khi ứng dụng được thiết lập và chạy (trong ISS Express), tôi chuyển sang User1 trên máy của mình (không có Active Directory) và gọi trang web trong Internet Explorer (có, "Xác thực Windows tích hợp" được bật trong cài đặt). Với thiết lập này, người dùng trong HttpContext.User.IdentityUser1WindowsIdentity.GetCurrent() là người dùng phát triển của tôi, người dùng tôi đang làm việc trong Visual Studio.

Tôi cũng đã cố gắng mạo danh bằng tay:

WindowsIdentity winId = (WindowsIdentity)User.Identity; 
WindowsImpersonationContext ctx = null; 
try 
{ 
    ctx = winId.Impersonate(); 

    // GetNumbers() tries to get the number of files for both directories  
    numbers = GetNumbers(); 
} 
catch (Exception e) 
{ 
} 
finally 
{ 
    if (ctx != null) 
    { 
     ctx.Undo(); 
    } 
} 

Thật không may, tôi nhận được ngoại lệ "Hoặc là một mức độ mạo danh yêu cầu không được cung cấp, hoặc mức độ mạo danh cung cấp không hợp lệ." Một số người đã tuyên bố chủ đề này đã giải quyết được vấn đề của họ: https://kc.mcafee.com/corporate/index?page=content&id=KB56194 Không phải cho tôi. Tôi đã thêm User1 và người dùng của riêng tôi vào danh sách và khởi động lại máy tính. Không thay đổi.

Điều duy nhất mang lại cho tôi một chút hy vọng là mạo danh với thông tin đăng nhập riêng biệt, như được mô tả trên https://msdn.microsoft.com/en-us/library/ms998351.aspx#paght000023_impersonatingusinglogonuser Những bất lợi là khá rõ ràng: Tôi phải có mật khẩu của người dùng và tại sao tôi nên đăng nhập lại nếu người dùng đã đã làm điều đó cho tôi.

Mặc dù đây là một dự án mới mà không thay đổi lớn của tôi, một số chi tiết thông tin chỉ để kiểm tra sự tỉnh táo ...

Web.config

<authentication mode="Windows" /> 
<authorization> 
    <deny users="?" /> 
</authorization> 

thiết lập dự án của tôi là

  • "Xác thực ẩn danh" là false
  • "Windows authenticat ion" là true
  • 'chế độ pipline được quản lý' là Integrated

Mọi góp ý về những gì để thay đổi để làm cho công việc dự án đơn giản này như mong đợi?

Trân trọng, Carsten

Trả lời

3

Tôi cuối cùng quản lý để có được nó để làm việc (IIS Express và IIS)! Như đã đề cập ở trên, cách tiếp cận đầu tiên chỉ là một mẫu thử nghiệm. Mục tiêu cuối cùng là tạo ra một GUI chạy trên máy chủ A và một API chạy trên máy chủ B. Cả hai được thực hiện với ASP.NET.

Các Web.config của GUI và API có các thiết lập này:

<system.web> 
    <authentication mode="Windows" /> 
    <authorization> 
    <deny users="?" /> 
    </authorization> 
    <identity impersonate="true" /> 
</system.web> 

Thuộc tính dự án (nhấn F4 sau khi chọn dự án) "Chế độ pipline được quản lý" được thiết lập để Classic.

Một nơi nào đó trên SO tôi đã thấy một cuộc thảo luận về việc liệu mạo danh có hoạt động với HttpClient không. Nó đã được nói, nó có. Vâng, nó không dành cho tôi. Và WebClient là không vui nếu bạn đang sử dụng một loạt các phương pháp HTTP. Vì vậy, tôi chuyển sang RestSharp:

RestClient client = new RestClient(baseUrl); 
client.Authenticator = new NtlmAuthenticator(); 
  • lưu ý đặc biệt cho Visual Studio: Bạn phải bắt đầu Visual Studio as administrator hoặc người nào khác mạo danh sẽ không hoạt động trên IIS nhanh!
  • Lưu ý đặc biệt cho IIS: Hồ bơi ứng dụng phải sử dụng Classic "Chế độ đường ống được quản lý".
  • Lưu ý đặc biệt (trong khi thử nghiệm): Lúc đầu, API yêu cầu tôi xác thực, không nên. Lý do khá đơn giản: sử dụng My user1 trên máy phát triển của tôi đã có một mật khẩu thì user1 trên máy tính mục tiêu của tôi ...

Tôi hy vọng điều này sẽ giúp một ai đó.

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