2016-09-19 24 views
5

kimliğine bürünme özelliğini ayarlayın, iki dizindeki dosya sayısını saymaya çalışan çok basit bir proje oluşturdum. User1, Directory2 ve User2 erişiminin Directory1 erişmesine izin verilmez. Kimliğe bürünme nedeniyle başvurumu yapan kullanıcıya bağlı olarak yalnızca bir rakam almalıyım. Her iki kullanıcı da yönetici olarak kurulur.İlk bakış için ASP.NET

Bu nedenle Visual Studio 2015'te (Windows 8.1'de çalışan) yeni bir MVC projesi oluşturdum ve Windows kimlik doğrulamasını kullanmak üzere seçildim. Uygulama çalıştırıldıktan ve çalıştırıldıktan sonra (ISS Express'te), makinemde User1'a geçiyorum (Active Directory yok) ve Internet Explorer'da web sitesini arayın (evet, "Tümleşik Windows kimlik doğrulaması", ayarlarda etkinleştirildi). Bu kurulumla, HttpContext.User.Identity'daki kullanıcı User1 ve WindowsIdentity.GetCurrent(), Visual Studio'da çalışmakta olduğum geliştirme kullanıcımdır.

Ben elle de taklit çalıştık: "Gerekli bir temsil düzeyi sağlanmadı Ya veya sağlanan temsil düzeyi geçersiz"

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(); 
    } 
} 

Ne yazık ki, istisna olsun Bazı insanlar bu sorunu çözdüğünü iddia ediyorlardı: https://kc.mcafee.com/corporate/index?page=content&id=KB56194 Benim için değil. Listeye User1 ve kendi kullanıcımı ekledim ve bilgisayarı yeniden başlattım. Değişiklik yok.

Bana biraz umut veren tek şey, https://msdn.microsoft.com/en-us/library/ms998351.aspx#paght000023_impersonatingusinglogonuser sayılı belgede açıklandığı gibi, ayrı bir oturum açma ile taklit edilmesidir. Dezavantajları oldukça açıktır: Kullanıcının parolasını almalıyım ve neden zaten kullanıcı girdiysem tekrar giriş yapmalıyım benim için yaptı. Benim Web.config

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

Projem ayarları

bu bana göre büyük değişiklikler yapmadan yeni bir proje olmasına rağmen, sadece aklı kontrol için biraz daha bilgi ...

  • "Anonim kimlik doğrulaması" false
  • "Windows kimlik doğrulaması iyon Yönetilen pipline modu 'beklendiği gibi bu basit bir proje çalışması için değiştirmek için ne Integrated

herhangi bir öneriniz olan" true

  • olan'?

    Saygılarımızla, Carsten

  • cevap

    3

    Sonunda o (IIS Express ve IIS) çalışmaya başardı! Yukarıda bahsedildiği gibi, ilk yaklaşım sadece bir prototipti. Son hedef sunucu A'da çalışan bir GUI ve sunucu B üzerinde çalışan bir API oluşturmaktı. Her ikisi de ASP.NET ile birlikte uygulandı. "Yönetilen pipline modu" Classic olarak ayarlanır (proje seçtikten sonra basın F4)

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

    proje özelliğini:

    GUI Web.config

    ve API bu ayarları var.

    SO üzerinde bir yerde, kimliğe bürünmenin HttpClient ile çalışıp çalışmadığı konusunda bir tartışma gördüm. Öyle söylendi. Şey, benim için yapmadı. Ve çeşitli HTTP yöntemleri kullanıyorsanız WebClient eğlencelidir. Bu yüzden RestSharp geçiş:

    RestClient client = new RestClient(baseUrl); 
    client.Authenticator = new NtlmAuthenticator(); 
    
    • Visual Studio için özel not: yönetici olarak ya da başka kimliğe bürünme IIS Express çalışmaz Visual Studio başlamak zorunda!
    • IIS için özel not: Uygulama havuzu, Classic "Yönetilen boru hattı modunu" kullanmalıdır.
    • Özel not (test sırasında): İlk başta, API kimlik doğrulama yapmamı istedi, hangisinin yapılmamasını istedi. Nedeni çok basitti: benim geliştirme makinede Benim kullanıcı user1 sonra başka bir şifre benim hedef makinede user1 ...

    bu kimse yardımcı olur umarım vardı.