Я видел много сообщений с точно такой же ошибкой:
Microsoft.Data.SqlClient.SqlException (0x80131904): Ошибка входа для пользователя ' DOMAIN \ MACHINE $ ' .
, но происхождение из этого исключения может быть совершенно разным для каждого случая, вот мое объяснение:
Я создаю API с использованием asp. net В ядре 3.1 идея заключается в том, что только некоторые пользователи активного каталога имеют доступ к базе данных за кулисами.
При запуске кода из Visual Studio и IIS Express он подключается нормально, процесс использует мой пользователь активного каталога по умолчанию подключается.
При публикации API на IIS моего локального хоста я получаю следующее:
Подключение из браузера (Firefox) Я получаю исключение, пользователь 'DOMAIN \ MACHINE $', я даже не получаю запрос на ввод учетных данных.
Подключение от Почтальон , на Вкладка Auth Я устанавливаю тип NTLM Authentication, имя пользователя, пароль и d omain. Кажется, не используется вообще, поскольку я получаю то же исключение, что и с Firefox.
Подключение из консольного приложения , которое я создал для целей тестирования, могу Получите данные идеально, процесс консоли, кажется, действительно использует учетные данные текущего пользователя из windows.
Вот код из консольного приложения:
static async Task<string> CallWebApiProtectedAsync(string webApiUrl)
{
try
{
var uri = new Uri(webApiUrl);
var credentialsCache = new CredentialCache { { uri, "NTLM", CredentialCache.DefaultNetworkCredentials } };
var handler = new HttpClientHandler { Credentials = credentialsCache };
var httpClient = new HttpClient(handler) { BaseAddress = uri, Timeout = new TimeSpan(0, 0, 10) };
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var response = httpClient.GetAsync(webApiUrl).Result;
return await response.Content.ReadAsStringAsync();
}
catch (Exception ex)
{
Console.WriteLine("Exception in CallWebApiProtectedAsync("+webApiUrl+"):\n" + ex.Message);
return null;
}
}
Моя цель - заставить API работать также для Postman и Firefox, чтобы протестировать его более гибко.
Возможно, я испортил какую-либо настройку из самого приложения ASP. NET или из IIS, совсем не уверен, я новичок в этом ... вот некоторые настройки, которые могут поможет вам поймать root всего этого.
ASP. NET Строка подключения к базовому API:
Сервер = SERVERNAME; База данных = DATABASENAME; Trusted_Connection = False ; Integrated Security = SSPI; ");
Я также пытался установить в классе автозагрузки некоторые параметры, такие как:
app.UseAuthorization();
app.UseAuthentication();
services.AddAuthentication(HttpSysDefaults.AuthenticationScheme);
services.AddAuthentication(IISDefaults.AuthenticationScheme);
services.Configure<IISServerOptions>(options =>
{
options.AutomaticAuthentication = false;
});
services.Configure<IISOptions>(options =>
{
options.ForwardClientCertificate = true;
});
Но все равно те же результаты.
IIS Конфигурация для аутентификации: Windows Аутентификация включена. Остальные записи отключены (Anonymous, Basi c и Digest).
Любая идея или предложение будут весьма оценил:)