.net - 如果客户端和服务都在同一服务器上的同一帐户下运行,是否可以避免指定 servicePrincipalName?

标签 .net wcf exception-handling wcf-security net.tcp

我有一个配置了 net.tcp 绑定(bind)的 WCF 服务:

<netTcpBinding>
    <binding >
        <security mode="Transport">
            <transport clientCredentialType="Windows" />
            <message clientCredentialType="None" />
        </security>
    </binding>
</netTcpBinding>

我有一个客户端 - Web 应用程序。两者都在同一台服务器上的 NT AUTHORITY\NETWORK SERVICE 下运行,只是端口不同。

当客户端尝试连接到服务时,会产生错误:

System.ComponentModel.Win32Exception: The logon attempt failed



这可以通过在客户端指定 servicePrincipalName 来解决:
<endpoint>
    <identity>
        <servicePrincipalName value="NT AUTHORITY\NETWORK SERVICE" />
    </identity>
</endpoint>

但我可以避免吗?我希望客户端使用其当前用户。

最佳答案

客户端配置的 servicePrincipalName 值 int endpoint/identity 部分没有指定客户端的身份,而是指定了预期的服务身份。请记住,WCF 身份验证是相互的(客户端也识别服务)

在这种情况下,客户端希望服务在“网络服务”帐户下运行。

<endpoint>
    <identity>
        <servicePrincipalName value="NT AUTHORITY\NETWORK SERVICE" />
    </identity>
</endpoint>

如果客户端和服务位于同一台机器上,则可以替换为
<endpoint>
    <identity>
        <servicePrincipalName value="host/localhost" />
    </identity>
</endpoint>

服务身份验证现在取决于 dns 名称 (localhost)

关于.net - 如果客户端和服务都在同一服务器上的同一帐户下运行,是否可以避免指定 servicePrincipalName?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11168188/

相关文章:

.net - 可以在异步回调中进行繁重的处理吗?

c# - WCF 和 ref 参数

wcf - 如何拦截 WCF 错误并返回自定义响应?

c++ - 如何关闭异常处理?

c# - .NET 中定时器的最大精度是多少?

c# - 在C#中生成颜色渐变

java - AsyncTask 显示 WCF 的响应

exception-handling - 只在生产中捕获异常是个好主意吗?

.net - "referenced assembly"如何验证 "caller assembly"的签名/真实性?

wcf - 使用 System.ServiceModel.ServiceAuthenticationManager 自定义 WCF 身份验证?