如果没有显式设置凭据,WCF Windows身份验证如何工作

时间:2012-10-03 16:22:28

标签: asp.net wcf windows-authentication

我有一个asp.net Web应用程序,可以调用多个WCF服务。该网络应用程序位于www.mydomain.com,服务位于services.mydomain.com。它们来自同一台服务器。

我刚刚将安全端点(bassicHttpBindings)添加到使用传输安全性(https)和Windows身份验证的服务中:

<binding name="WindowsSecuredBinding">
  <security mode="Transport">
    <transport clientCredentialType="Windows" />
  </security>
</binding>

并将客户端Web应用程序配置为使用这些新的安全端点。我期待下一步是在Web应用程序中编写一些代码来设置客户端凭据以通过Windows身份验证。令我惊讶的是,服务调用正在成功而不设置客户端凭据。我假设它必须发送Web应用程序正在运行的帐户,但不知道如何验证。在其他情况下,我认为我已经看到客户端凭据没有隐式默认值。

所以我有两个问题:

  1. 身份验证如何成功?它是否向用户发送运行的应用程序,浏览器用户的凭据,没有凭据?
  2. 如何调试/记录/跟踪身份验证过程?我想至少看一下经过身份验证的用户名,以便我可以验证安全性。

1 个答案:

答案 0 :(得分:3)

  1. 根据您在服务器和客户端的当前配置,客户端正在发送它正在运行的信用卡。因为凭据类型设置为Windows,如果您在域中,则会导致安全协商检入Kerberos,如果是工作组环境,则会在NTLM中检查。 (More information can be found here.
  2. 要调试身份验证过程,WCF具有可以启用的审核功能。 Instructions for adding auditing are here
  3. 以下是审核MSDN页面的重要部分:

    <behaviors>
     <behavior name="myAuditBehavior">
      <serviceSecurityAudit auditLogLocation="Application"
        suppressAuditFailure="false" 
        serviceAuthorizationAuditLevel="None" 
        messageAuthenticationAuditLevel="SuccessOrFailure" />
     </behavior>
    </behaviors>
    

    并将行为添加到服务中:

    <service type="[Your service type here]" behaviorConfiguration="myAuditBehavior">
    

    启用审核后,您可以看到所有授权活动(如果以这种方式配置,则会成功和失败)。这应该允许您验证您的安全性是否按照您希望的方式设置。

    如果您碰巧需要传递使用ASP.NET Web应用程序的用户凭据的功能(这称为Impersonation),则可以在此页面上找到msdn文档“Delagation and Impersonation with WCF”。< / p>