我有一个WCF Web服务使用basicHttpBinding与IIS 7上托管的NTLM(禁用匿名身份验证并启用Windows身份验证) . AppPool使用传递身份验证 . 我有一个远程连接到Web服务的控制台应用程序 .
如果我使用 my domain user 进行连接,则该过程连接成功 . 如果我使用在域上创建的新服务帐户进行连接,则会收到以下错误:
HTTP请求未经授权使用客户端身份验证方案'Ntlm' . 从服务器收到的身份验证标头是“NTLM” .
内在的例外是:
远程服务器返回错误:(401)未经授权 .
这是域帐户或我的身份验证方案的问题吗?错误消息表明它是身份验证方案,但为什么它在我的帐户下工作而不是在同一域上创建的服务帐户?
Server Config
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Ntlm" proxyCredentialType="None" realm="" />
</security>
Client Consumption
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;
}
1 回答
解决方案:这实际上并不像我最初想的那样是WCF错误 . 当我记录内部异常时,我发现我收到了“401 - 未经授权”的错误 . 原来我创建的服务帐户没有获得对服务主机的远程连接访问权限 . 一旦我们授予访问权限并以用户身份添加服务帐户,该过程就会正确连接 .