2015-05-12 7 views
5

У меня есть два сайта, A и B. A использует API, который предоставляет B, а для B требуется проверка подлинности Windows. Оба сайта живут в домене D.проверка подлинности Windows работает с локального сервера, но не с сервера на сервер

API используется по адресу HttpClient, а когда сайт A выполняется локально, под моей учетной записью домена (которая находится в домене P), предоставляется доступ. В этом случае HttpClient конкретизируется следующим образом:

using(var client = new HttpClient(new HttpClientHandler { UseDefaultCredentials: true })) 

Когда A развернут на сервере тестирования, приведенные выше результаты в 401 Unauthorized ответ. Пул приложений на сервере тестирования работает под учетной записью службы в домене D.

При явном виде, используя учетную запись службы, как это:

var credential = new NetworkCredential("service-account", "password", "D"); 
var cache = new CredentialCache 
{ 
    { 
    new Uri(apiServerUri), "NTLM", credential 
    } 
}; 
var handler = new HttpClientHandler 
{ 
    Credentials = cache 
}; 

using(var client = new HttpClient(handler)) 
... 

И снова запущен сайт A локально, доступ по-прежнему предоставляется. Доступ также предоставляется при обращении к API напрямую через браузер и указании учетных данных учетной записи службы. Журналы указывают, что определенная учетная запись службы используется для доступа к API.

Развертывание вышеуказанной обратной ссылки на сервере тестирования по-прежнему приводит к 401 Unauthorized.

Развертывание сайта A локальному экземпляру IIS, также успешно использует API B.

Запуск сайта B локально, а затем доступ к нему через сайт A локально, результаты 401 Unauthorized.

Доступ к API через браузер на сервере тестирования, где развернут A, и указание учетных данных учетной записи службы, также дает 401 Unauthorized.

Я не уверен, куда идти отсюда - я что-то пропустил в коде, чтобы заставить это работать? Или это может быть проблема IIS или AD?

+0

Пахнет, как проблема с Kerberos, попробуйте следующее: http://blog.jimmychandra.com/post/service-principal-name-headache –

+0

Я не пытаюсь выполнить двойную пересылку или сквозную аутентификацию - так что я не как это будет вопрос делегации? Он должен просто использовать идентификатор приложения. Но мы все равно сделаем снимок –

+0

Итак, Web 1 находится на том же сервере, что и Web2? Может быть, это просто реакция коленного рефлекса, так как я видел сервер для сервера. Предполагая, что клиент -> сервер 1 -> сервер 2 (как в литеральном экземпляре сервера/сервера, а не только на уровне веб-приложения) ... –

ответ

4

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

Сайт B имеет дополнительную установку привязки хоста в IIS, чтобы прослушивать localhost:12345. Сайт A настроен на подключение к этой конечной точке, а не к доменному имени для сайта B. Теперь аутентификация работает правильно.

Мне было бы интересно, может ли кто-нибудь объяснить, почему это так - мне не нравятся исправления «магия».

редактировать Казалось бы, что this kb article является вероятной причиной такого поведения.В частности:

При использовании полное доменное имя (FQDN) или пользовательский заголовок хоста для просмотра локального веб-узла, размещенного на компьютере, который работает Microsoft Internet Information Services (IIS) 5.1 или более поздняя версия, вы можете получить сообщение об ошибке, похожее на следующее: HTTP 401.1 -: Logon Failed Эта проблема возникает , когда веб-сайт использует встроенную проверку подлинности и имеет имя, которое отображается на локальный адрес замыкания на себя

и

Поэтому аутентификация завершается с ошибкой, если полное доменное имя или пользовательский заголовок хоста, которые вы используете, не соответствует имени локального компьютера.

Изменения в реестре на этих серверах на самом деле не являются вариантом, поэтому похоже, что работа вокруг - это то, что мы будем использовать.

 Смежные вопросы

  • Нет связанных вопросов^_^