У меня есть два сайта, 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?
Пахнет, как проблема с Kerberos, попробуйте следующее: http://blog.jimmychandra.com/post/service-principal-name-headache –
Я не пытаюсь выполнить двойную пересылку или сквозную аутентификацию - так что я не как это будет вопрос делегации? Он должен просто использовать идентификатор приложения. Но мы все равно сделаем снимок –
Итак, Web 1 находится на том же сервере, что и Web2? Может быть, это просто реакция коленного рефлекса, так как я видел сервер для сервера. Предполагая, что клиент -> сервер 1 -> сервер 2 (как в литеральном экземпляре сервера/сервера, а не только на уровне веб-приложения) ... –