【问题标题】:httpClient.SendAsync throws Unspecified GSS failurehttpClient.SendAsync 引发未指定的 GSS 失败
【发布时间】:2020-11-09 13:30:14
【问题描述】:

我正在使用 .NET Core 3.1 这是我正在使用的代码:

        CredentialCache credentialCache = new CredentialCache();
        credentialCache.Add(new Uri(URL), "NEGOTIATE", new NetworkCredential(USER, PASSWORD, DOMAIN));

        using (HttpClientHandler handler = new HttpClientHandler())
        {
            handler.Credentials = credentialCache;

            using (HttpClient httpClient = new HttpClient(handler))
            {
                HttpRequestMessage request = new HttpRequestMessage(new HttpMethod("GET"), REQUEST_URL);

                HttpResponseMessage response = httpClient.SendAsync(request).Result;

                Console.Write(response.ToString());
            }
        }

它在我的 windows 机器上工作正常,但在 linux docker 容器上启动时崩溃:

System.AggregateException:发生一个或多个错误。 (GSSAPI 操作失败并出现错误 - 未指定的 GSS 失败。次要代码可能会提供更多信息(找不到领域“DOMAIN_NAME”的 KDC)。) ---> System.ComponentModel.Win32Exception (0x80090020): GSSAPI 操作失败并出现错误 - 未指定的 GSS 失败。次要代码可能会提供更多信息(找不到领域“DOMAIN_NAME”的 KDC)。 在 System.Net.Security.NegotiateStreamPal.AcquireCredentialsHandle(字符串包,布尔 isServer,NetworkCredential 凭证) 在 System.Net.NTAuthentication.Initialize(布尔 isServer,字符串包,NetworkCredential 凭据,字符串 spn,ContextFlagsPal 请求的ContextFlags,ChannelBinding 通道绑定) 在 System.Net.Http.AuthenticationHelper.SendWithNtAuthAsync(HttpRequestMessage 请求,Uri authUri,ICredentials 凭据,布尔 isProxyAuth,HttpConnection 连接,HttpConnectionPool 连接池,CancellationToken 取消令牌) 在 System.Net.Http.HttpConnectionPool.SendWithNtConnectionAuthAsync(HttpConnection 连接,HttpRequestMessage 请求,布尔 doRequestAuth,CancellationToken 取消令牌) 在 System.Net.Http.HttpConnectionPool.SendWithRetryAsync(HttpRequestMessage 请求,布尔 doRequestAuth,CancellationToken 取消令牌) 在 System.Net.Http.AuthenticationHelper.SendWithAuthAsync(HttpRequestMessage 请求,Uri authUri,ICredentials 凭据,布尔 preAuthenticate,布尔 isProxyAuth,布尔 doRequestAuth,HttpConnectionPool 池,CancellationToken cancelToken) 在 System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage 请求,CancellationToken cancelToken) 在 System.Net.Http.DiagnosticsHandler.SendAsync(HttpRequestMessage 请求,CancellationToken cancelToken) 在 OurHomeServer.Log.LoggingHandler.SendAsync(HttpRequestMessage request, CancellationToken cancelToken) 在 /src/OurHomeServer/Log/LoggingHandler.cs:line 35 在 System.Net.Http.HttpClient.FinishSendAsyncBuffered(Task`1 sendTask, HttpRequestMessage request, CancellationTokenSource cts, Boolean disposeCts)

当我在容器的外壳中使用 curl 请求时它可以工作。

【问题讨论】:

    标签: docker .net-core httpclient


    【解决方案1】:

    我在 Dockerfile 中添加了以下行

    RUN apt install -y mc sudo syslog-ng realmd gss-ntlmssp
    

    现在可以了!!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-20
      • 2015-02-01
      • 2016-09-19
      • 1970-01-01
      相关资源
      最近更新 更多