微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用NTLM使用WCF Web服务对控制台应用程序进行身份验证?

我有一个WCF Web服务使用basicHttpBinding与IIS 7上托管的NTLM(禁用匿名身份验证并启用 Windows身份验证). AppPool使用传递身份验证.我有一个远程连接到Web服务的控制台应用程序.

如果我使用我的域用户连接,则该过程成功连接.如果我使用在域上创建的新服务帐户进行连接,则会收到以下错误

The HTTP request is unauthorized with client authentication scheme
‘Ntlm’. The authentication header received from the server was ‘NTLM’.

内在的例外是:

The Remote Server returned an error: (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;
}

解决方法

解决方案:这实际上并不像我最初想的那样是WCF错误.当我记录内部异常时,我发现我收到了“401 – 未经授权”的错误.原来我创建的服务帐户没有获得对服务主机的远程连接访问权限.一旦我们授予访问权限并以用户身份添加服务帐户,该过程就会正确连接.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐