为什么IIS中的授权规则不限制对我的WCF服务的访问?
我有一个独立的WCF服务托管在IIS 10中。我想将对web服务的访问限制为一组选定的用户。通过在IIS中执行以下操作,我可以为web应用程序执行此操作: 身份验证:仅Windows身份验证已禁用匿名身份验证 授权规则:允许预定义的组,即角色 但是,当我为web服务执行上述步骤并在其web.config中更改clientCredentialType=Windows时,它仍然允许域中的任何用户与它交谈。我错过了什么明显的东西吗?web服务在配置授权方面是否与web应用程序的功能不同?考虑到我的设置,我希望只有MyTestGroup中的用户能够与web服务进行通信,而其他所有用户都将获得401-未经授权 顺便说一句,我尝试设置了拒绝所有人规则,但域用户仍然可以与web服务对话,因此我觉得授权设置没有以某种方式生效。正在寻找对此的任何见解 以下是相关的web.config内容:为什么IIS中的授权规则不限制对我的WCF服务的访问?,wcf,authorization,web-config,windows-authentication,iis-10,Wcf,Authorization,Web Config,Windows Authentication,Iis 10,我有一个独立的WCF服务托管在IIS 10中。我想将对web服务的访问限制为一组选定的用户。通过在IIS中执行以下操作,我可以为web应用程序执行此操作: 身份验证:仅Windows身份验证已禁用匿名身份验证 授权规则:允许预定义的组,即角色 但是,当我为web服务执行上述步骤并在其web.config中更改clientCredentialType=Windows时,它仍然允许域中的任何用户与它交谈。我错过了什么明显的东西吗?web服务在配置授权方面是否与web应用程序的功能不同?考虑到我的设置
<system.serviceModel>
<services>
<service name="StudyManagement.StudyManagement">
<endpoint address="" binding="basicHttpBinding" bindingConfiguration="secureHttpBinding" name="StudyManagement" contract="StudyManagement.IStudyManagement" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior>
<serviceMetadata httpGetEnabled="false" httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<protocolMapping>
<add binding="basicHttpsBinding" scheme="https" />
</protocolMapping>
<bindings>
<basicHttpBinding>
<binding maxReceivedMessageSize="1048576" />
<binding name="secureHttpBinding">
<security mode="Transport">
<transport clientCredentialType="Windows" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<serviceHostingEnvironment aspNetCompatibilityEnabled="false" minFreeMemoryPercentageToActivateService="0" />
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
<directoryBrowse enabled="false" />
<security>
<authorization>
<remove users="*" roles="" verbs="" />
<add accessType="Allow" users="" roles="MyAllowGroup" />
</authorization>
</security>
</system.webServer>
您可以参考此项重新创建授权规则。此外,wcf服务的授权可以使用ServiceAuthenticationmanager,以下Microsoft文档有助于回答我的问题: 重要收获: ASP.NET HTTP运行时处理ASP.NET请求,但不参与处理发送给WCF服务的请求,即使这些服务与ASP.NET内容托管在同一AppDomain中。相反,WCF服务模型截取发往WCF服务的消息,并通过WCF传输/通道堆栈路由它们 在AppDomain中,HTTP运行时实现的功能适用于ASP.NET内容,但不适用于WCF。ASP.NET应用程序平台的许多HTTP特定功能不适用于承载在包含ASP.NET内容的AppDomain内的WCF服务。这些功能的示例包括: 基于文件的授权:WCF安全模型不允许在决定是否授权服务请求时将访问控制列表ACL应用于服务的.svc文件 基于配置的URL授权:类似地,WCF安全模型不遵守System.Web的配置元素中指定的任何基于URL的授权规则。如果服务驻留在由ASP.NET的URL授权规则保护的URL空间中,则WCF请求将忽略这些设置 解决方案: 通过配置web.config使用ASP.NET兼容模式:
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
</system.serviceModel>
与默认的并排配置不同,WCF承载基础结构拦截WCF消息并将其路由出HTTP管道,在ASP.NET兼容模式下运行的WCF服务完全参与ASP.NET HTTP请求生命周期。在兼容模式下,WCF服务通过IHttpHandler实现使用HTTP管道,类似于处理ASPX页面和ASMXWeb服务请求的方式。因此,就以下ASP.NET功能而言,WCF的行为与ASMX相同:
基于文件的授权:通过将文件系统访问控制列表ACL附加到服务的.svc文件,可以确保在ASP.NET兼容模式下运行的WCF服务的安全。
可配置URL授权:当WCF服务在ASP.NET兼容模式下运行时,会对WCF请求强制执行ASP.NET的URL授权规则。
我建议阅读整篇文章以获取更多信息。这是一本简短而有益的读物
感谢@Shiraz Bhaiji在上的文章参考。感谢您的回复,但是,我的问题不是设置网页授权。那部分很好。我的问题是关于WCF服务.svc的。我真的不想走上创建自己的身份验证验证器的道路。希望只使用内置的IIS Windows身份验证/授权规则。额外的调查发现了另一个堆栈溢出问题,该问题似乎与我的问题相同,或者至少性质非常相似。多年前被问到,但没有得到任何有用的回答。这并不能让我在寻求洞察力的过程中感到有希望!