WCF拒绝某些端点上未经身份验证的用户

时间:2010-07-29 16:27:41

标签: c# wcf

我有一个WCF服务项目,我已经按照guidelines here实现了自定义基本身份验证,而且一切正常!但是,我无法找到是否有办法拒绝未经身份验证的用户仅访问特定端点。

在我的项目中,我有大约5个端点,只希望用户对其中几个进行身份验证。其他人,我想允许匿名访问。

我的web.config(代码段)是这样的:

  <system.web>
    <customErrors mode="Off"/>
    <authentication mode="None"/>
    <compilation debug="true" targetFramework="4.0">
        <assemblies>
          <add assembly="System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
        </assemblies>
    </compilation>
    <httpModules>
      <add name="CustomBasicAuthentication" type="WebServices.Auth.CustomBasicAuthenticationModule, WebServices"/>
    </httpModules>
    <authorization>
      <deny users="?"/>
    </authorization>

    <membership defaultProvider="defaultProvider">
      <providers>
        <add name="defaultProvider" type="WebServices.Auth.WSMembershipProvider, WebServices"/>
      </providers>
    </membership>
</system.web>

端点非常简单:

<service name="WebServices.Distance" behaviorConfiguration="defaultBehavior">
  <endpoint address="" binding="webHttpBinding" bindingConfiguration="defaultBinding" contract="WebServices.IDistance" behaviorConfiguration="rest" />
</service>
.... more endpoints below here ....

因此,我可以说不是命中所有端点,而是拒绝未经身份验证的用户使用端点#1(或通过名称或其他方式)。

我希望这有一定道理。如果没有,请随意嗤之以鼻。 :)

1 个答案:

答案 0 :(得分:0)

好的,简单的解决方案。

删除该部分,并将以下内容放在该部分的下方。

  <location path="Secure">
    <system.web>
      <authorization>
        <deny users="?"/>
      </authorization>
    </system.web>
  </location>

然后只需创建一个名为“Secure”的文件夹,并将所需的服务及其接口放入该文件夹中。

也许在我在这里发表问题之前,我应该多做一些调查。