代码之家  ›  专栏  ›  技术社区  ›  Joe Daley

IIS管理器中的身份验证设置与web.config和system.servicemodel

  •  0
  • Joe Daley  · 技术社区  · 15 年前

    我有一个wcf web服务,我想使用基本身份验证。我在身份验证选项中迷失了方向:

    • 在iis 6管理器中,我可以进入网站的属性并设置身份验证选项。
    • 在网站的web.config文件中,在 system.web ,有一个 <authentication mode="Windows"/> 标签
    • 在网站的web.config文件中,在 system.serviceModel ,我可以配置:

      <wsHttpBinding>
        <binding name="MyBinding">
          <security mode="Transport">
            <transport clientCredentialType="Basic"/>
          </security>
        </binding>
      </wsHttpBinding>
      

    这三个有什么区别?应该如何配置每一个?

    一些上下文:我有一个简单的网站项目,其中包含一个 .svc web服务,我希望它使用ssl上的基本身份验证。(另外,我希望它不使用windows帐户,但这可能是另一个问题。)

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

    前两个实际上是关于访问iis6中的asp.net虚拟目录或虚拟应用程序——这基本上与wcf无关(wcf实际上不是asp.net的一部分,也不依赖于它)。这些设置控制如何根据身份验证处理进入iis6 web服务器的http请求。这基本上控制来自Internet的匿名呼叫者是否可以不经身份验证直接呼叫,或者是否需要输入用户名/密码,或者是否只允许具有此域中有效Windows标识的呼叫者进入。

    您的wcf服务对此感兴趣的唯一原因是,当您在iis中托管wcf服务(只有许多选项中的一个)时,您有一个 (myservice).svc 需要驻留在虚拟目录中的文件。当然,对svc文件的访问由iis6/asp.net的身份验证设置控制。

    内部的安全模式 <wsHttpBinding> 第节是wcf服务将如何与其客户端通信的安全相关定义。mode=transport意味着您要保护实际的传输层(通常使用ssl),而不是分别保护每个消息。这个设置在Intranet场景中工作得很好,在这种场景中,所有的客户端都位于公司防火墙后面,但是在Internet场景中工作得不太好,因为您无法通过一系列中介跳到您的服务器来真正控制从客户端(这个星球上的任何地方)到服务器的整个链。不能这样做。在这种情况下,您必须使用mode=message,它基本上对每一条通过线路的消息进行加密和签名—它可以在从起点到服务器的任何数量的路由器和中继上工作。

        2
  •  0
  •   Nix    15 年前

    前两个是相关的,如果它们不匹配您的服务将无法激活。如果您选择windows身份验证,显然有一个假设,即您将绑定到windows域或本地计算机。

    由于要执行ssl基本身份验证,因此要将其设置为none,然后配置传输安全性。

    Your one stop shop for setting up transport + basic authentication

    MSDN Article on Transport+Username + Windows Forms

    我不确定你是否还在计划如何做安全性,但我建议你考虑使用消息安全性和传输(个人对消息安全性的偏见)。

    Transport vs Message Comparison

    Patterns & Practices on Message and Transport Security