我有一个WCF Web服务,我将其作为IIS7.5中的Web服务托管。我希望这个服务只能由两个组访问。 Web服务正在成功运行,但似乎没有进行任何身份验证。
我的印象是(在阅读了证明这一点的MSDN页面的gobs),所有人真正必须做的是在应用程序站点上启用Windows身份验证,禁用匿名身份验证,将模式设置为web.config中的窗口和将允许/拒绝规则添加到授权部分,如下所示:
<system.web>
<authentication mode="Windows" />
<compilation debug="false" strict="false" explicit="true" targetFramework="4.0" />
<pages /> <!-- Omitted -->
<authorization>
<allow roles="Managers" />
<allow roles="Operations" />
<deny users="*" />
<deny users="?" />
</authorization>
</system.web>
通过上述步骤和web.config更改完成,并在进入IIS中的Authorization页面并重新加载Auth规则后,通过WCFTestclient调用服务显示它正常运行。除了我不属于这两个群体中的任何一个......
看起来它只是让任何人进来。我的问题是这些:
我有上述web.config文件的服务,以及安装并启用了Windows身份验证的IIS7.5实例。匿名身份验证已禁用。 Auth规则被定义为两个组可以访问,而所有其他组都被拒绝,但尽管我在这些组中,但我可以访问该服务。
所以我似乎有认证工作。如果我只有“允许所有用户”规则,则可以访问该网络服务。如果我制定了拒绝所有用户规则,我将无法再访问。但是,如果我添加我的帐户(“domain \ MyAccount”作为允许(无论web.config中的位置如何),我仍然无法访问。
我改变了什么来到这里, 在服务定义中添加了以下内容:
<AspNetCompatibilityRequirements(RequirementsMode:=AspNetCompatibilityRequirementsMode.Required)> _
在web.config中添加了以下内容:
<system.web>
<authentication mode="Windows"/>
<authorization>
<deny users="*"/>
<allow users="sierra\cblissittekeps"/>
</authorization>
</system.web>
和
<system.servicemodel>
<bindings>
<basicHttpBinding>
<binding name="ADServiceBinding">
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Windows"/>
</security>
</binding>
</basicHttpBinding>
</bindings>
<system.servicemodel>
答案 0 :(得分:1)
好的!显然,我在原帖中采取的步骤实际上并不足够。您必须将aspnetcompatabilityrequirements属性添加到服务类(它实现您的服务接口),您必须向serviceHostingEnvironment标记添加一个aspNetCompatibility属性:
<serviceHostingEnvironment multipleSiteBindingsEnabled="true"
aspNetCompatibilityEnabled="true" />
而且,似乎没有人提到的事情,你的允许/拒绝规则的顺序会有所不同。添加允许 AFTER 拒绝所有用户意味着仍然拒绝所有用户。将它放在之前意味着除了允许中的那些用户之外,所有用户都被拒绝。