有没有办法在webHttpBinding WCF服务中从原始浏览器传递域凭据? 我认为这应该是可能的,因为当我登录到IIS中启用了Windows身份验证的任何aspx页面时,我可以获得调用用户的域凭据。我如何以这种方式设置我的WCF服务?我目前在WCF服务中获得的用户身份是svc运行的应用程序池的用户身份?
编辑
我没有.NET 4 - 我的配置文件如下,但我仍然收到错误:
此服务的安全设置需要“匿名”身份验证 但是没有为承载此服务的IIS应用程序启用它。
我应该在IIS中为该路径显式启用Anonymous吗?我认为这会取消我获取域名的努力。
<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>
答案 0 :(得分:2)
您需要在服务中启用身份验证 - 假设.NET 4将以下内容添加到您的配置
<bindings>
<webHttpBinding>
<binding>
<security mode="Transport">
<transport clientCredentialType="Windows"/>
</security>
</binding>
</webHttpBinding>
</bindings>
对于.NET 3.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将自动传递用户的凭据。但是,在获得401然后发送凭据之前,非IE浏览器将不会匿名访问该站点。初始请求要求在IIS中支持匿名访问,因为WCF处理身份验证机制
如果您需要获取HttpContext,可以使用Asp.NET Compatibility。但是在WCF中,您可以使用ServiceSecurityContext.Current.PrimaryIdentity.Name来获取经过身份验证的用户
答案 1 :(得分:0)