尽管在IIS7.5中进行了配置,但Webservice似乎没有进行任何身份验证

时间:2011-07-05 19:56:05

标签: authentication web-config iis-7.5

问题

我有一个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调用服务显示它正常运行。除了我不属于这两个群体中的任何一个......

问题

看起来它只是让任何人进来。我的问题是这些:

  1. 有没有办法在Web服务上查看通过和失败的身份验证检查? (如果是这样,我可以看看是否有任何类型的身份验证)。
  2. 以上看起来是否正确?这似乎有点简单,但鉴于微软方法,如此标准的设置起来相当简单并不遥远。
  3. 底线

    我有上述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>
    

1 个答案:

答案 0 :(得分:1)

好的!显然,我在原帖中采取的步骤实际上并不足够。您必须将aspnetcompatabilityrequirements属性添加到服务类(它实现您的服务接口),您必须向serviceHostingEnvironment标记添加一个aspNetCompatibility属性:

<serviceHostingEnvironment multipleSiteBindingsEnabled="true"
                           aspNetCompatibilityEnabled="true" />

而且,似乎没有人提到的事情,你的允许/拒绝规则的顺序会有所不同。添加允许 AFTER 拒绝所有用户意味着仍然拒绝所有用户。将它放在之前意味着除了允许中的那些用户之外,所有用户都被拒绝。