Если вы работаете в Active Directory в интрасети, вот несколько советов:
(Windows Server 2012)
Запуск всего, что говорит с AD на веб-сервере, требует кучу изменений и терпения. Поскольку при работе на веб-сервере вместо локального IIS / IIS Express он работает с удостоверением AppPool, поэтому вам необходимо настроить его так, чтобы он выдавал себя за любого, кто посещает сайт.
Как получить текущего вошедшего в систему пользователя в активном каталоге, когда приложение ASP.NET MVC работает на веб-сервере внутри сети:
// Find currently logged in user
UserPrincipal adUser = null;
using (HostingEnvironment.Impersonate())
{
var userContext = System.Web.HttpContext.Current.User.Identity;
PrincipalContext ctx = new PrincipalContext(ContextType.Domain, ConfigurationManager.AppSettings["AllowedDomain"], null,
ContextOptions.Negotiate | ContextOptions.SecureSocketLayer);
adUser = UserPrincipal.FindByIdentity(ctx, userContext.Name);
}
//Then work with 'adUser' from here...
Вы должны обернуть все вызовы, связанные с «контекстом активного каталога», следующим образом, чтобы он действовал как среда размещения для получения информации AD:
using (HostingEnvironment.Impersonate()){ ... }
В вашем web.config также должно быть установлено значение impersonate
true:
<system.web>
<identity impersonate="true" />
У вас должна быть включена аутентификация Windows в web.config:
<authentication mode="Windows" />