C# 在尝试使用HttpClient检索AccesToken时,我遇到了一个错误
尝试使用HttpClient从windows服务器检索Acces令牌时,出现错误: “GSSAPI操作失败,出现错误-提供的状态代码无效(SPNEGO找不到协商机制)。”C# 在尝试使用HttpClient检索AccesToken时,我遇到了一个错误,c#,.net,linux,.net-core,dotnet-httpclient,C#,.net,Linux,.net Core,Dotnet Httpclient,尝试使用HttpClient从windows服务器检索Acces令牌时,出现错误: “GSSAPI操作失败,出现错误-提供的状态代码无效(SPNEGO找不到协商机制)。” private readonly HttpClient client=new HttpClientHandler(){UseDefaultCredentials=true,AllowAutoRedirect=true}{Timeout=TimeSpan.FromSeconds(5)}; 公共异步任务GetAuthenticat
private readonly HttpClient client=new HttpClientHandler(){UseDefaultCredentials=true,AllowAutoRedirect=true}{Timeout=TimeSpan.FromSeconds(5)};
公共异步任务GetAuthenticationToken(字符串accessBrokerHost)
{
尝试
{
var response=await client.sendaync(新的HttpRequestMessage(HttpMethod.Get,$“{accessBrokerHost}/Token”)).ConfigureAwait(false);
//accessBrokerHost是在windows服务器内部创建的HTTP SPN
如果(!response.issucessStatusCode)
{
抛出新的BrokerNotAvailableException();
}
返回wait response.Content.ReadAsAsync().configurewait(false);
}
}
system.ComponentModel.win32Exception正在引发,因为GSSAPI操作失败,出现错误-提供了无效的状态代码(SPNEGO找不到协商机制)
上面的代码在windows中运行良好,但在Linux中运行不好(我使用的是LinuxMint)。据我所知,它指的是一个试图使用Kerberos但没有Kerberos票证用于Linux身份验证的问题。最后,我找到了这个问题的解决方案 解决方案1: 第一步。根据,您应该添加
AppContext.SetSwitch("System.Net.Http.UseSocketsHttpHandler", false);
第二步。由于UseDefaultCredentials=true在这里不起作用,您需要手动将网络凭据传递给HttpClient,如下所示
HttpClient client = new HttpClient(new HttpClientHandler{Credentials = new NetworkCredential("UserName" "Password", "Domain")}
第三步。您应该将HttpRequestMessage版本更改为
HttpVersion.Version11
解决方案2:您还可以通过将整个应用程序转换为NetcoreApp3.0来解决此问题。最后,我找到了解决此问题的方法 解决方案1: 第一步。根据,您应该添加
AppContext.SetSwitch("System.Net.Http.UseSocketsHttpHandler", false);
第二步。由于UseDefaultCredentials=true在这里不起作用,您需要手动将网络凭据传递给HttpClient,如下所示
HttpClient client = new HttpClient(new HttpClientHandler{Credentials = new NetworkCredential("UserName" "Password", "Domain")}
第三步。您应该将HttpRequestMessage版本更改为
HttpVersion.Version11
解决方案2:您还可以通过将整个应用程序转换为NetcoreApp3.0来解决此问题谢谢@dustinos3的编辑。我很感激。根据这个,这似乎是一年前的一个bug,你用的是什么版本?也许使用最新版本可以为您修复。谢谢您的回复,我正在使用netcoreapp2.2。我看过很多与这个问题相关的东西,包括你建议的链接,但我不太明白。我可能不是c#方面的专家,但我很擅长谷歌搜索,哈哈,而且因为错误提到win32,它不是linux的一部分,我想这不正常,当您不在windows中时,似乎有人通过阻止SocketShtpHandler重写HttpHandler解决了相同的问题,此链接对此进行了更好的解释。谢谢你,女士,我已经试过了,但是没有用。得到相同的错误。谢谢@dustinos3的编辑。我很感激。根据这个,这似乎是一年前的一个bug,你用的是什么版本?也许使用最新版本可以为您修复。谢谢您的回复,我正在使用netcoreapp2.2。我看过很多与这个问题相关的东西,包括你建议的链接,但我不太明白。我可能不是c#方面的专家,但我很擅长谷歌搜索,哈哈,而且因为错误提到win32,它不是linux的一部分,我想这不正常,当您不在windows中时,似乎有人通过阻止SocketShtpHandler重写HttpHandler解决了相同的问题,此链接对此进行了更好的解释。谢谢你,女士,我已经试过了,但是没有用。得到相同的错误。