WCF basicHttpBinding默认配置调用IIS托管服务报匿名认证错误
WCF basicHttpBinding 匿名调用报认证方案错误的解决方法
这个报错的核心原因是服务端绑定配置、IIS身份验证规则、客户端绑定配置三者不匹配,你之前只切换IIS匿名认证状态没效果,是因为漏了配置一致性校验,按以下步骤逐一排查即可:
1. 不要依赖basicHttpBinding的默认配置,显式声明无安全模式
你认知里的basicHttpBinding默认Security=None仅在无任何全局配置覆盖的场景下生效,IIS承载WCF时,machine.config、全局web.config的默认绑定配置经常会覆盖这个默认值,必须显式给绑定指定无安全配置,再让端点引用该配置:
<system.serviceModel> <bindings> <basicHttpBinding> <binding name="NoSecurityBasicHttp"> <security mode="None"> <transport clientCredentialType="None" proxyCredentialType="None" /> <message clientCredentialType="None" /> </security> </binding> </basicHttpBinding> </bindings> <services> <service name="Library.Service1"> <endpoint address="HttpAuthNoneSecNone" binding="basicHttpBinding" bindingConfiguration="NoSecurityBasicHttp" contract="Library.IService1" name="HttpAuthNoneSecNone" /> </service> </services> </system.serviceModel>
注意:端点必须加bindingConfiguration属性指向你写的无安全绑定,否则还是会加载全局默认配置。
2. 正确配置IIS身份验证项
IIS身份验证面板不是只开匿名就行,必须关闭所有其他冲突的认证方式:
- 打开IIS管理器,定位到你部署WCF服务的应用程序
- 进入「身份验证」功能页
- 仅启用匿名身份验证,将Windows身份验证、基本身份验证、摘要式身份验证、ASP.NET模拟这些所有其他认证项全部设为禁用
- 右键编辑匿名身份验证的标识,选择「应用程序池标识」,不要用默认的IUSR账号,避免文件系统权限拦截
3. 同步修正客户端配置,保证和服务端完全一致
添加服务引用自动生成的客户端配置,经常会默认带传输安全、Windows认证的设置,必须手动改成和服务端一致的无安全配置:
<system.serviceModel> <bindings> <basicHttpBinding> <binding name="HttpAuthNoneSecNone"> <security mode="None" /> </binding> </basicHttpBinding> </bindings> <client> <endpoint address="http://你的服务部署地址/Service1.svc/HttpAuthNoneSecNone" binding="basicHttpBinding" bindingConfiguration="HttpAuthNoneSecNone" contract="HttpAuthBasicSecTransport.IService1" name="HttpAuthNoneSecNone" /> </client> </system.serviceModel>
你现在客户端代码通过端点名HttpAuthNoneSecNone初始化客户端,如果客户端配置里这个端点对应的安全模式不是None,调用时就会直接抛出你遇到的匿名认证方案不允许的错误。
4. 其他常见冲突排查点
- 检查web.config中是否存在
<authorization>节点,如果配置了<deny users="?"/>规则会直接拒绝所有匿名请求,要删掉这类规则或者加<allow users="*"/> - 如果开启了aspNet兼容模式(
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>),要确认站点根目录、svc文件所在目录下没有其他web.config覆盖身份验证规则 - 部署完成后先在浏览器直接访问svc文件地址,确认能正常打开WCF服务帮助页、不弹出认证输入框,再用客户端发起调用。
内容的提问来源于stack exchange,提问作者Booji Boy
相关产品推荐
相关产品推荐

