Назад | Перейти на главную страницу

Перенос моего веб-сайта на другой сервер изменяет аутентификацию с Kerberos на NTLM

У меня есть веб-сервис, настроенный для проверки подлинности Windows. Клиентский код, который вызывает WS, передает учетные данные WS следующим образом:

myWebService.Credentials = System.Net.CredentialCache.DefaultCredentials;

(Насколько я понимаю, это представляет собой домен имени пользователя и пароля вошедшего в систему пользователя).

Я тестирую проблемы с конфигурацией и не понимаю, как обеспечить настройку Kerberos.

ДЕТАЛИ:

У меня есть 2 виртуальных каталога на тот же сервер IIS (один - «клиент» со страницами .aspx), а другой - «сервер» (на нем размещается веб-сервис, который вызывает клиент).

Мой клиент отображает ключевую информацию о подключающемся пользователе с помощью этого кода:

private string GetUserInfo()
{
    System.Security.Principal.WindowsIdentity UserIdentityInfo;
    StringBuilder msg = new StringBuilder("User Name: ");
    UserIdentityInfo = System.Security.Principal.WindowsIdentity.GetCurrent();
    msg.Append(UserIdentityInfo.Name);
    msg.Append(Environment.NewLine);
    msg.Append(" Token: ");
    msg.Append(UserIdentityInfo.Token.ToString());
    msg.Append(Environment.NewLine);
    msg.Append(" Authenticated: ");
    msg.Append(UserIdentityInfo.AuthenticationType);
    msg.Append(Environment.NewLine);
    msg.Append(" System: ");
    msg.Append(UserIdentityInfo.IsSystem);
    msg.Append(Environment.NewLine);
    msg.Append(" Guest: ");
    msg.Append(UserIdentityInfo.IsGuest);
    msg.Append(Environment.NewLine);
    msg.Append(" Anonymous: ");
    msg.Append(UserIdentityInfo.IsAnonymous);
    msg.Append(Environment.NewLine);
    return msg.ToString();
}

Тип аутентификации Kerberos когда ОБА веб-клиент и вызываемая веб-служба находятся на одном сервере (например, SERVER1). Фактическое исполнение тоже работает правильно.

Тип аутентификации меняется на NTLM когда вызывается тот же код веб-клиента, но теперь он находится на SERVER2. Вызываемый веб-сервис по-прежнему находится на исходном сервере (SERVER1). Фактическое выполнение НЕ выполняется, поскольку учетные данные неверны.

SERVER1 и SERVER2 находятся в одной локальной сети (тот же DOMAIN), и учетная запись домена, которую я использую для тестирования каждого сценария выше, одинакова (я нахожусь в группе администраторов на каждой машине).

Как я могу настроить это так, чтобы KERBEROS был типом аутентификации, то есть когда этот клиент на SERVER2 вызывается из браузера «мной»?

У вас классическая ситуация с двойным прыжком. График в следующем посте в значительной степени отражает вашу ситуацию:

http://blogs.technet.com/b/askds/archive/2008/06/13/understanding-kerberos-double-hop.aspx

Когда и ваш «клиент», и «служба» находятся на Server1, существует только «один прыжок» для аутентификации пользователя. Когда вы добавили Server2 в микс, теперь у вас есть двойной переход, при котором аутентификация делегируется.

Поскольку вы запускаете пулы приложений как учетную запись домена, вам необходимо настроить имена участников-служб (SPN), чтобы предотвратить двойной прыжок. Есть ресурсы, упомянутые в сообщении выше. Об этом также упоминается в этой статье:

http://msdn.microsoft.com/en-us/library/ff649309.aspx

SPN необходимо будет создать для конкретной учетной записи пользователя, службы и имени хоста. Это нужно сделать на контроллере домена.