我使用Windows身份验证和ASP.NET模拟通过IIS7对WCF服务的用户进行身份验证。
在本地调试时,我能够看到System.Security.Principal.WindowsIdentity.GetCurrent()。Name等于我的Windows凭据。当我将此服务部署到服务器时,除非启用匿名身份验证,否则WCF无法运行。
那么,我们如何让这个WCF服务在匿名身份验证已禁用 的服务器上运行?
更新1 :尝试这两项建议后出现错误消息:
主机上配置的身份验证方案 ('IntegratedWindowsAuthentication')不允许配置的那些 'WebHttpBinding'('Anonymous')绑定。请确保 SecurityMode设置为Transport或TransportCredentialOnly。 此外,这可以通过更改身份验证来解决 通过IIS管理工具,通过这个应用程序的方案 ServiceHost.Authentication.AuthenticationSchemes属性,在 应用程序配置文件在 element,通过更新绑定上的ClientCredentialType属性, 或者通过调整AuthenticationScheme属性 HttpTransportBindingElement。
更新2 :已按以下方式设置身份验证:
应用程序池:
网站:
WCF申请:
答案 0 :(得分:3)
这是一个常见问题。您需要设置安全模式和相应的传输元素 - 如果使用basicHttpBinding - 在config
中放入以下文本<basicHttpBinding>
<binding>
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Windows" />
</security>
</binding>
</basicHttpBinding>
阅读以下帖子 - http://blogs.msdn.com/b/drnick/archive/2007/03/23/preventing-anonymous-access.aspx http://blogs.msdn.com/b/wenlong/archive/2006/05/18/600603.aspx
答案 1 :(得分:1)
错误的原因之一是您需要在托管ASP.net的服务器上启用kerberos委派。这允许Windows身份验证令牌传播到WCF服务托管服务器。
您可以查看以下链接
Impersonation and Delegation in WCF
HTH
Rauts
答案 2 :(得分:0)
有同样的问题。对我来说,这是因为IIS上没有为应用程序启用Windows身份验证。