代码之家  ›  专栏  ›  技术社区  ›  user70192

WCF-防止未经授权的客户端

wcf
  •  2
  • user70192  · 技术社区  · 15 年前

    我有一个WCF服务,我只希望我的应用程序可以访问它。我的应用程序由使用jquery的传统Web界面和Silverlight界面组成。这些接口都不需要用户登录。

    有没有一种方法可以告诉WCF服务只允许来自我的域的客户端?如果是这样,怎么办?

    谢谢您!

    4 回复  |  直到 15 年前
        1
  •  2
  •   marc_s HarisH Sharma    15 年前

    是的,当然可以-只需要来自呼叫者的Windows凭据(即域中的Active Directory帐户)。

    任何未经您的域验证的人都将被拒绝。

    您可以通过指定nettcpbinding with transport security(如果所有内容都在公司防火墙后面)或wshttpbinding with message security来实现这一点:

    <bindings>
       <netTcpBinding>
          <binding name="DomainUsersOnly">
             <security mode="Transport">
                <transport clientCredentialType="Windows" />
             </security>
          </binding>
       </netTcpBinding>
       <wsHttpBinding>
          <binding name="HttpDomainUsersOnly">
             <security mode="Message">
                <message clientCredentialType="Windows" />
             </security>
          </binding>
       </wsHttpBinding>
    </bindings>
    

    现在,您所需要做的就是引用端点中的一个绑定配置:

    <endpoint name="whatever"
              address="......"
              binding="netTcpBinding"
              bindingConfiguration="DomainUsersOnly"
              contract="IYourservice" />
    

    你应该走了。

        2
  •  1
  •   Clay Fowler    15 年前

    如果您的所有合法用户都应该在您的内部企业局域网上(在同一子网上),那么您可以使用如下方法通过IP地址将其锁定 this . 如果您愿意的话,也可以用这种方式将其限制在几个特定的IP屏蔽上。

    但是如果你想让合法用户从任何地方攻击它,那么这不是一个好方法。在这种情况下,身份验证会更好。

        3
  •  0
  •   Benjamin Ortuzar    15 年前

    您可以在IIS中添加安全限制,以仅允许从域调用Web服务。

        4
  •  0
  •   Randolpho    15 年前

    除非考虑Windows身份验证(因为请求来自您的域),否则最好通过防火墙在不同的级别执行此操作。在这个级别上,您可以将传入流量限制到一组已知的IP地址。这只会持续到目前为止,因为ips可以被欺骗,但这是一个开放的服务,所以就这样吧。一个更好的选择是 二者都 防火墙和Windows身份验证。

    或者,您可以通过查询来检查WCF中的客户机IP地址。 OperationContext.Current.IncomingMessageProperties .