Windows身份验证:用户“ DOMAIN \ MACHINE $”的登录失败

时间:2020-03-11 12:53:33

标签: c# asp.net-core iis sql-server-2008-r2 asp.net-core-webapi

我看过很多帖子,它们的错误完全相同:

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身份验证。其余条目被禁用(匿名,基本和摘要)。

任何想法或建议都会得到高度评价:)

0 个答案:

没有答案