我有一个 WCF Web 服务,使用 basicHttpBinding 和 IIS 7 上托管的 NTLM(禁用匿名身份验证并启用 Windows 身份验证)。AppPool 使用直通身份验证。我有一个远程连接到 Web 服务的控制台应用程序。
如果我使用我的域用户连接,则该过程连接成功。如果我使用在域上创建的新服务帐户进行连接,则会收到以下错误:
HTTP 请求未经客户端身份验证方案“Ntlm”授权。从服务器收到的身份验证标头是“NTLM”。
内部异常是:
远程服务器返回错误:(401) Unauthorized。
这是域帐户或我的身份验证方案的问题吗?错误消息暗示它是身份验证方案,但为什么它会在我的帐户下工作,而不是在同一域上创建的服务帐户?
服务器配置
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Ntlm" proxyCredentialType="None" realm="" />
</security>
客户消费
public static WMServiceClient CreateWMServiceProxy()
{
var proxy = new WMServiceClient();
proxy.Endpoint.Address = new EndpointAddress( ConfigurationCache.WMServiceEndpoint );
proxy.Endpoint.Binding = new BasicHttpBinding( BasicHttpSecurityMode.TransportCredentialOnly )
{
MaxBufferSize = 2147483647,
MaxReceivedMessageSize = 2147483647
};
( (BasicHttpBinding) proxy.Endpoint.Binding ).Security.Transport.ClientCredentialType = HttpClientCredentialType.Ntlm;
return proxy;
}