2008-09-24 26 views
17

Tôi có một ứng dụng có mạo danh được sử dụng trong suốt. Nhưng khi người dùng đăng nhập với tư cách quản trị viên, một vài thao tác yêu cầu họ phải ghi vào chính máy chủ. Bây giờ nếu những người dùng này không có quyền trên máy chủ thực tế (một số không) nó sẽ không cho phép họ viết.Tôi có thể tắt tính năng mạo danh chỉ trong một vài trường hợp

Điều tôi muốn làm là tắt tính năng mạo danh chỉ với một vài lệnh.

Có cách nào để làm điều gì đó như thế này không?

using(HostingEnvironment.Impersonate.Off()) 
    //I know this isn't a command, but you get the idea? 

Cảm ơn bạn.

Trả lời

20

Đảm bảo Hồ bơi ứng dụng có các quyền phù hợp mà bạn cần.

Sau đó, khi bạn muốn trở lại bản sắc bơi ứng dụng ... chạy như sau:

private WindowsImpersonationContext context = null; 
public void RevertToAppPool() 
{ 
    try 
    { 
     if (!WindowsIdentity.GetCurrent().IsSystem) 
     { 
      context = WindowsIdentity.Impersonate(System.IntPtr.Zero); 
     } 
    } 
    catch { } 
} 
public void UndoImpersonation() 
{ 
    try 
    { 
     if (context != null) 
     { 
      context.Undo(); 
     } 
    } 
    catch { } 
} 
2

Tôi không chắc đây có phải là cách tiếp cận ưa thích hay không nhưng khi tôi muốn thực hiện điều này, tôi đã tạo một phiên bản WindowsIdentity và gọi phương thức Impersonate. Điều này cho phép mã tiếp theo mạo danh người dùng Windows khác. Nó trả về một WindowsImpersonationContext có phương thức Undo để hoàn nguyên lại ngữ cảnh mạo danh.

+0

Có cách nào bạn biết rằng tôi có thể gọi tài khoản web_app mặc định mà không chỉ định nó ở đâu không? – naspinski

0

Bạn có thể tắt xác thực cho trang và sau đó mạo danh người dùng được xác thực theo cách thủ công trong phần còn lại của mã.

http://support.microsoft.com/kb/306158

này có một tham chiếu đến một phần cuối cùng, nhưng về cơ bản bạn mạo danh User.Identity

Điều này sẽ có nghĩa là bạn sẽ phải mạo danh vào đầu của bất kỳ cuộc gọi đến trang web, tắt nó đi khi bạn cần nó, sau đó bật nó trở lại khi bạn đã làm xong, nhưng nó phải là một giải pháp khả thi.

0

Tôi vừa kết thúc việc cấp cho các thư mục quyền ghi cho "Người dùng đã xác thực"

+0

Điều đó cũng hoạt động. Nhưng nó để lại một số rủi ro bảo mật rất lớn. Bởi vì ngay cả người dùng ẩn danh cũng có thể ghi vào thư mục đó. Tôi đặc biệt khuyên bạn nên tạo cho mình một lớp học hoàn nguyên về bản sắc Hồ bơi ứng dụng. Sau đó, sử dụng cá thể đó dưới sự hoàn nguyên. –

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