Последующее HttpWebRequest с установленным NetworkCredential учитывает недавно измененный пароль домена
Мы собираем имя пользователя и пароль домена Windows и сохраняем их в файле cookie через веб-интерфейс. Эти учетные данные вместе с запросом на конкретные данные на постоянной основе в конечном итоге передаются через вызов WCF, размещенный в службе Windows, который сам перенаправляет его как новый вызов REST на другой сервер, настроенный в IIS с настроенной аутентификацией Windows. Это делается с помощью HttpWebRequest...
var url = baseServerUrl + "/" + apiCall.Url;
var request = (HttpWebRequest)WebRequest.Create(url);
request.Timeout = 1000000;
request.Method = apiCall.HttpMethod;
bool credentialsSet = false;
if (!string.IsNullOrEmpty(apiCall.Identity))
{
// split into Domain\User\Password
var parts = apiCall.Identity.Split('\\');
if (parts.Length == 3)
{
request.Credentials = new NetworkCredential(parts[1], parts[2], parts[0]);
credentialsSet = true;
}
}
// Then more code submitting the request ...
Поэтому, если я сохраню в домене cookie пароль A, сделайте запрос с помощью вышеизложенного (который все работает нормально), но затем измените пароль домена Windows на B, и мы обнаружим, что для последующих запросов мы будем использовать приведенный выше код (снова выполняющийся как windows service) будет успешно проходить аутентификацию при получении и установке A на NetworkCredential (получение A, потому что cookie все еще остается со старым паролем). Если мы немедленно перезапускаем сервис, любые дальнейшие попытки использовать HttpWebRequest и NetworkCredential с паролем A генерируют 401. Почему старые пароли домена сохраняются до перезапуска? Как вы можете остановить это поведение?