Asp.net 在webHttpBinding wcf服务中是否有方法从原始浏览器传递域凭据?

Asp.net 在webHttpBinding wcf服务中是否有方法从原始浏览器传递域凭据?,asp.net,wcf,dns,wcf-security,wcf-client,Asp.net,Wcf,Dns,Wcf Security,Wcf Client,在webHttpBinding WCF服务中是否有方法从原始浏览器传递域凭据? 我认为这应该是可能的,因为当我登录到IIS中启用Windows身份验证的任何aspx页面时,我可以获得调用用户的域凭据。如何以这种方式设置WCF服务?目前,我在WCF服务中获得的用户身份是svc运行时所使用的应用程序池的身份 编辑 我没有.NET 4--我的配置文件如下,但仍然出现错误: 此服务的安全设置需要“匿名”身份验证 但是,没有为承载此服务的IIS应用程序启用此功能 我应该在IIS中为该路径显式启用匿名吗?我

在webHttpBinding WCF服务中是否有方法从原始浏览器传递域凭据? 我认为这应该是可能的,因为当我登录到IIS中启用Windows身份验证的任何aspx页面时,我可以获得调用用户的域凭据。如何以这种方式设置WCF服务?目前,我在WCF服务中获得的用户身份是svc运行时所使用的应用程序池的身份

编辑

我没有.NET 4--我的配置文件如下,但仍然出现错误:

此服务的安全设置需要“匿名”身份验证 但是,没有为承载此服务的IIS应用程序启用此功能

我应该在IIS中为该路径显式启用匿名吗?我想这会破坏我获得域名的努力

<behaviors>
<endpointBehaviors>
    <behavior name="Awesome.Project.OperationsBehavior">
        <enableWebScript />
    </behavior>
</endpointBehaviors>
</serviceBehaviors>
    <behavior name="Awesome.Project.OperationsServiceBehavior">
        <serviceMetadata httpGetEnabled="true" />
        <serviceDebug includeExceptionDetailInFaults="false" />
    </behavior>
</serviceBehaviors>
</behaviors>

<services>
      <service behaviorConfiguration="Awesome.Project.OperationsServiceBehavior"
        name="Awesome.Project.Operations">
        <endpoint address="" binding="webHttpBinding" 
         contract="Awesome.Project.Operations" 
         behaviorConfiguration="Awesome.Project.OperationsBehavior" 
         bindingName="windowsSecurityWebHttpBinding">
          <identity>
            <dns value="localhost" />
          </identity>
        </endpoint>
        <!--<endpoint address="mex" binding="mexHttpBinding" 
             contract="IMetadataExchange" />-->
      </service>
</services>

<bindings>
    <webHttpBinding>
        <binding name="windowsSecurityWebHttpBinding">
            <security mode="Transport">
                <transport clientCredentialType="Windows"/>
            </security>
        </binding>
    </webHttpBinding>
</bindings>

您需要在服务中打开身份验证-假设.NET 4将以下内容添加到您的配置中

<bindings>
  <webHttpBinding>
    <binding>
      <security mode="Transport">
        <transport clientCredentialType="Windows"/>
      </security>
    </binding>
  </webHttpBinding>
</bindings>

对于.NET3.5或3.0,您需要

<bindings>
  <webHttpBinding>
    <binding name="webBindingConfig">
      <security mode="Transport">
        <transport clientCredentialType="Windows"/>
      </security>
    </binding>
  </webHttpBinding>
</bindings>

<services>
  <service ...>
    <endpoint bindingConfiguration = "webBindingConfig" binding="webHttpBinding" .../>
  </service>
</services>

编辑其他问题:

WCF通常不会通过非安全传输传递凭据-这就是mode=“Transport”很重要的原因。如果您摆脱了它,它与WebHttpBinding的Mode=“None”相同

如果站点被认为位于intranet区域,IE将自动传递用户的凭据。然而,非IE浏览器不会,因此会在获得401证书并发送凭据之前匿名访问该网站。初始请求要求在IIS中支持匿名访问,因为WCF处理身份验证机制


如果需要获得HttpContext,可以使用。但是,在WCF中,您可以使用ServiceSecurityContext.Current.PrimaryIdentity.Name来获取经过身份验证的用户

给出了如何进行此操作的演练。

他是否还必须在特定操作或整个服务上设置模拟行为属性?如果他希望在服务和浏览器中查看客户端标识如果他想使用客户身份或aspx代码调用服务,那么是的,你是对的。好的。一开始没注意到细微差别。谢谢:)用我的努力更新了描述;还是会打嗝--也许这在.NET4之前不受支持?谢谢!我要求你做出改变。我必须摆脱mode='transport',这样它就可以在普通的旧http而不是https上工作。不幸的是,我仍然无法使用HTTPContext获取当前用户。谁在调用服务-浏览器或aspx页?它将来自浏览器。请在端点中将bindingName更改为bindingConfiguration更新我的答案以同时显示3.5版本