gpt4 book ai didi

.net - 通过具有 Windows (NTLM) 身份验证的代理访问具有基本身份验证的 Web 服务

转载 作者:行者123 更新时间:2023-12-01 15:51:00 25 4
gpt4 key购买 nike

我有一个使用基本身份验证的 Web 服务。我还有一个使用 Web 服务的 Windows 窗体应用程序。当它启动时,会要求用户提供凭据,然后在向服务发出任何请求时使用这些凭据。

问题是,该应用程序由公司网络内的客户使用。他们所有的互联网流量都通过使用 Windows 身份验证的代理进行路由。我正在尝试将我的应用程序配置为在发出请求时正确使用该代理。

到目前为止,我的客户端应用程序的 app.config 中有这个:

<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="mySoap" closeTimeout="00:02:00" openTimeout="00:02:00"
receiveTimeout="00:10:00" sendTimeout="00:02:00" allowCookies="false"
bypassProxyOnLocal="true" hostNameComparisonMode="StrongWildcard"
maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Basic" proxyCredentialType="Windows"
realm="myrealm" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://www.myservice.com/service.asmx"
binding="basicHttpBinding" bindingConfiguration="mySoap"
contract="MyPublicService.mySoap" name="mySoap" />
</client>
</system.serviceModel>
<system.net>
<defaultProxy useDefaultCredentials="true" />
</system.net>

你认为这行得通吗?我不能轻易测试它。该应用程序和服务已经在没有代理的情况下进行了测试,它们工作得很好,我只需要正确配置代理。

从理论上讲,此配置将确保所有请求都使用默认代理,该代理使用 Windows 身份验证。它将使用默认凭据,该凭据将在其 Windows 设置中设置。然后它将使用用户提供的凭据在 Web 服务上执行基本身份验证。

更新

客户端尝试了这个并得到了 400 错误:
System.ServiceModel.ProtocolException: The remote server returned an unexpected response: (400) Bad Request. ---> System.Net.WebException: The remote server returned an error: (400) Bad Request.
at System.Net.HttpWebRequest.GetResponse()
at System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)
--- End of inner exception stack trace ---

Server stack trace:
at System.ServiceModel.Channels.HttpChannelUtilities.ValidateRequestReplyResponse(HttpWebRequest request, HttpWebResponse response, HttpChannelFactory factory, WebException responseException, ChannelBinding channelBinding)
at System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)
at System.ServiceModel.Channels.RequestChannel.Request(Message message, TimeSpan timeout)
at System.ServiceModel.Dispatcher.RequestChannelBinder.Request(Message message, TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)

当我在没有代理的情况下从我的机器上尝试时,它工作正常。知道为什么吗?

最佳答案

400 错误与问题无关。 NTLM 代理的授权似乎正在使用此配置。

更新:

我也更改了服务器的安全配置以接受摘要。然后在设置用户名和密码时必须对代码进行一些小改动,然后它就开始工作了。看起来绑定(bind)在基本身份验证方面存在问题。

关于.net - 通过具有 Windows (NTLM) 身份验证的代理访问具有基本身份验证的 Web 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6154705/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com