安装程序
-
Windows 2003 R2上的IIS 6.0 R2-SP 2
-
已添加计算机的SPN(http/myserver&http/我的服务器:8080)
-
已为IIS应用程序池创建广告帐户
-
我正在使用
Brian Booth's debug site
我已经将这些设置镜像到承载WCF服务的站点。
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="WsHttpBindingConfig">
<security>
<message negotiateServiceCredential="true" />
</security>
</binding>
</wsHttpBinding>
</bindings>
<services>
<service behaviorConfiguration="ServiceBehavior" name="Service">
<endpoint address=""
binding="wsHttpBinding"
bindingConfiguration="WsHttpBindingConfig"
contract="IService">
<identity>
<servicePrincipalName value="http/myserver" />
<dns value="" />
</identity>
</endpoint>
<endpoint address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="ServiceBehavior">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
<serviceAuthorization
impersonateCallerForAllOperations="true" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
Web服务-Web方法
[OperationBehavior(Impersonation = ImpersonationOption.Required)]
public string GetCurrentUserName()
{
string name = WindowsIdentity.GetCurrent().Name;
return name;
}
客户端应用程序-应用程序配置
<system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="WSHttpBinding_IService"
... />
...
<security mode="Message">
<transport clientCredentialType="Windows"
proxyCredentialType="None"
realm="" />
<message clientCredentialType="Windows"
negotiateServiceCredential="true"
algorithmSuite="Default"
establishSecurityContext="true" />
</security>
</binding>
</wsHttpBinding>
</bindings>
<client>
<endpoint address="http://myserver/Service.svc"
binding="wsHttpBinding"
bindingConfiguration="WSHttpBinding_IService"
contract="KerberosService.IService"
name="WSHttpBinding_IService">
<identity>
<servicePrincipalName value="http/myserver" />
</identity>
</endpoint>
</client>
</system.serviceModel>
应用程序错误
客户端身份验证方案
“匿名”。身份验证标头
从服务器接收到
“谈判,NTLM。”
事件日志中存在以下错误:
例外情况:
System.ServiceModel.ServiceActivationException:
服务'/服务.svc“不可能
由于在
is:此服务的安全设置
承载此服务的应用程序。
我不明白。这项服务的重点是不允许匿名身份验证,每个用户/请求都必须使用Kerberos票证进行身份验证,然后将它们传递给其他计算机。
修订版1
阅读后
this SO question
我删除了元数据端点。这并没有解决问题。
经过进一步的研究,我发现了一些建议将wsHttpBinding更改为basicHttpBinding的帖子。对该部分的修改web.config文件,并且服务端点已更新以引用该绑定。
Web服务-Web配置(修订版)
<basicHttpBinding>
<binding name="basicBindingConfig">
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Windows"
proxyCredentialType="Windows"
realm="" />
</security>
</binding>
</basicHttpBinding>
客户端应用程序-应用程序配置(修订版)
<!-- ... -->
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Windows"
proxyCredentialType="Windows"
realm="" />
<message clientCredentialType="UserName"
algorithmSuite="Default" />
</security>
<!-- ... -->
客户端身份验证方案
“在这里谈些什么