WCF-Windows身份验证-安全设置要求匿名
我正在努力让WCF服务在我们服务器上的IIS上运行。部署后,我会收到一条错误消息: 此服务的安全设置需要“匿名”身份验证,但未为承载此服务的IIS应用程序启用此身份验证 我想使用Windows身份验证,因此我禁用了匿名访问。还要注意,有一个aspNetCompatibilityEnabled(如果这有什么区别的话) 这是我的web.config:WCF-Windows身份验证-安全设置要求匿名,wcf,security,authorization,Wcf,Security,Authorization,我正在努力让WCF服务在我们服务器上的IIS上运行。部署后,我会收到一条错误消息: 此服务的安全设置需要“匿名”身份验证,但未为承载此服务的IIS应用程序启用此身份验证 我想使用Windows身份验证,因此我禁用了匿名访问。还要注意,有一个aspNetCompatibilityEnabled(如果这有什么区别的话) 这是我的web.config: <system.serviceModel> <serviceHostingEnvironment aspNetCompati
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
<bindings>
<webHttpBinding>
<binding name="default">
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Windows" proxyCredentialType="Windows"/>
</security>
</binding>
</webHttpBinding>
</bindings>
<behaviors>
<endpointBehaviors>
<behavior name="AspNetAjaxBehavior">
<enableWebScript />
<webHttp />
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="defaultServiceBehavior">
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="false" />
<serviceDebug includeExceptionDetailInFaults="true" />
<serviceAuthorization principalPermissionMode="UseWindowsGroups" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service name="xxx.Web.Services.RequestService" behaviorConfiguration="defaultServiceBehavior">
<endpoint behaviorConfiguration="AspNetAjaxBehavior" binding="webHttpBinding"
contract="xxx.Web.Services.IRequestService" bindingConfiguration="default">
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" name="mex" contract="IMetadataExchange"></endpoint>
</service>
</services>
</system.serviceModel>
我在互联网上到处搜索,但运气不好。非常感谢您提供任何线索。所以这似乎是一个非常普遍的问题。关键是要从绑定中删除mex:
<endpoint address="mex" binding="mexHttpBinding" name="mex" contract="IMetadataExchange"></endpoint>
或者,在IIS中启用匿名访问,并在web.config中确保匿名访问被拒绝
希望这能帮助其他灵魂。
(我100%确定我在删除mex的情况下尝试过它。:-O)是的,看起来需要完全删除mex端点。背景
<serviceMetadata httpGetEnabled="false"/>
光靠自己是行不通的。谢谢 您可以检查这个。
我设法使它按预期工作
<configuration>
...
<system.serviceModel>
...
<bindings>
<basicHttpBinding>
<binding>
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Windows" />
</security>
</binding>
</basicHttpBinding>
</bindings>
...
</system.serviceModel>
...
</configuration>
...
...
...
...
也只需使用mex的服务绑定即可
因此,请更改当前配置:
<endpoint address="mex" binding="mexHttpBinding" name="mex" contract="IMetadataExchange"></endpoint>
到
这将解决问题其他解决方案:
您只需确保服务名称和合同是正确的
希望在某些方面有所帮助。匿名身份验证可以,并且在某些情况下必须为服务启用,但不能为站点启用 因此,请检查站点的“根”身份验证是否仅启用了Windows身份验证。然后展开您的站点,选择“服务”文件夹,并确保您的服务已启用Windows和匿名身份验证 我有相同的工作环境,这些环境中唯一的区别是服务的身份验证。在我的案例中,问题不是由选定的提供商(Ntlm或协商)引起的,而是由站点和服务的身份验证设置引起的 至少我有与基本MSSQL主数据服务网站和服务相同的错误消息,这就是解决方案。我在运行服务时确实遇到了错误,但站点运行几乎正常,MDS Explorer无法运行,因为服务的身份验证设置起初是错误的。此未完成配置的原因可能是创建新MDS站点时MDS configuration Manager中的错误
因此,在我的例子中,问题不是通过对web.config或ApplicationHost.config文件进行任何特殊编辑来解决的,我没有对配置文件进行任何编辑。刚刚在IIS管理器中为网站及其服务选择了正确的身份验证设置。我不确定这里的情况是否如此,但也许值得一试?当我删除'mex'端点并将clientCredentialType设置为'Ntlm'时,它对我很有效
我在SharePoint中托管WCF。看来此MEX绑定问题已在.NET 4.0中修复。将服务器的应用程序池.NET CLR版本从2.0更改为4.0解决了此问题 该问题应确定它使用的是哪个版本的IIS。请参阅我最终使用了您的替代方案。IIS anon+Windows和web.config拒绝所有匿名用户。我正在用asp.net托管3.5 WCF REST。感谢在遵循了我在这里找到的步骤之后,这对我起到了作用:,我从这里被引导到:@Andreythanks获取信息——在这里引用相关信息部分比提供简单的超链接更有帮助。谢谢!这对我来说很有效,但为了清楚起见,我还必须使用basicHttpBinding使
httpGetEnabled=“true”
对我有效。i、 e.将“mex”端点上的绑定从“mexHttpBinding”更改为“basicHttpBinding”
<endpoint address="mex" binding="webHttpBinding" bindingConfiguration="default" name="mex" contract="IMetadataExchange"></endpoint>