Позвольте мне предисловие сказать, что я занимаюсь этим вопросом около полутора недель и не могу понять. Думаю, я близок, но каждый раз, когда я так до сих пор думал, я ошибался. Я просмотрел все сообщения на форуме, которые мог найти, и ничего не помогло.
Я просто пытаюсь заставить свое веб-приложение и его соответствующую службу использовать проверку подлинности Windows, чтобы в коде я мог вытащить учетные данные текущего пользователя, не запрашивая их, и передать их хранимой процедуре базы данных через мою службу.
Звучит достаточно просто, правда?
НЕПРАВИЛЬНО!
С участием WireShark работает, я продолжаю получать ответ KRB_ERROR (30) с более подробной информацией о:
код_ошибки: KRB5KRB_AP_ERR_MODIFIED (41)
Я попробую это завтра, но я подумал, что опубликую сейчас на случай, если у кого-то есть идея, почему я продолжаю получать KRB5KRB_AP_ERR_MODIFIED ошибка, основанная на моей текущей настройке, которую я перечислю ниже.
Вот моя текущая настройка:
Windows Server 2008 R2 Standard SP1 64-разрядная 4,00 ГБ ОЗУ.
Ради этой публикации мы назовем этот сервер DALDEP01.TEST.LOCAL, и на нем у меня следующее:
MS SQL Server 2008 R2 который имеет базу данных, которую мы назовем Развернуть.
Только одна учетная запись пользователя имеет доступ к Развернуть db, который ТЕСТ \ DeploySvc.
Эта учетная запись пользователя является носитель данных / писатель данных и был предоставлен EXEC.
IIS 7.5 на котором размещены 2 веб-сайта:
Deploy.Service что делает операции CRUD против Развернуть дб.
Deploy.Web который принимает Silverlight 4 приложение, которое обращается к Deploy.Service.
Оба сайта настроены одинаково (потому что я не знаю, как еще это сделать):
Они используют DeployAppPool который работает под настраиваемой учетной записью пользователя ТЕСТ \ DeploySvc.
Анонимная аутентификация Отключено.
Проверка подлинности Windows Включено
Расширенная защита Принять.
Включить аутентификацию в режиме ядра Проверено.
Провайдеры просто Вести переговоры, поскольку я удалил NTLM, потому что мне нужен только Kerberos.
SPN настроены следующим образом:
C: \> setspn -l Deplowsvc
Зарегистрированные ServicePrincipalNames для CN = DeploySvc, OU = Services Accounts, DC = test, DC = local:
HTTP / deploy.test.local
HTTP / развертывание
У меня недавно была такая же проблема.
Оказалось, это связано с SPN. Имя участника-службы было сопоставлено учетной записи компьютера SQL Server, а не учетной записи службы, на которой выполнялся SQL Server.
Мы удалили и воссоздали имя участника-службы, сопоставленное с учетной записью службы, на которой запущен SQL Server 2012R2 на хосте, и все прошло отлично.
Эта проблема может быть вызвана дублированным SPN ...
setspn -X
... покажет вам, есть ли в вашем домене какие-либо дубликаты, и вам нужно будет удалить проблемный. Или вы можете использовать Утилита запросов SPN. Я также предполагаю, что вы уже изменили вкладку делегирования в AD для учетной записи службы, поэтому она доверена для делегирования?