我看过很多帖子,它们的错误完全相同:
Microsoft.Data.SqlClient.SqlException(0x80131904):用户' DOMAIN \ MACHINE $ '登录失败。
但是对于每种情况,此异常代码的来源都非常不同,这是我的解释:
我正在使用asp.net core 3.1构建API,其想法是只有一些活动目录用户才能在后台访问数据库。
从Visual Studio和IIS Express运行代码时,它可以正常连接,该进程默认情况下使用我的活动目录用户进行连接。
将API发布到本地IIS时,我得到了这个信息:
从浏览器( Firefox )连接我得到一个例外,用户是'DOMAIN \ MACHINE $',我什至没有提示输入凭据的提示。
从邮递员进行连接,在“身份验证”选项卡上,设置“类型NTLM身份验证”,用户名,密码和域。似乎根本没有使用,因为我得到了与Firefox相同的例外。
从为测试目的而创建的控制台应用程序进行连接,我可以完美地获取数据,控制台进程似乎确实使用了Windows中当前用户的凭据。
< / li>从控制台应用程序中获取代码:
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搞砸了所有设置,一点也不知道,我对此很陌生...这里有些设置可以帮助您了解所有这一切。
ASP.NET Core API连接字符串:
Server = SERVERNAME; Database = DATABASENAME; Trusted_Connection = False; Integrated Security = SSPI;“);
我也尝试过在Startup类中设置一些选项,例如:
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身份验证。其余条目被禁用(匿名,基本和摘要)。
任何想法或建议都会得到高度评价:)