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

xr2*_*0xr 5 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>
Run Code Online (Sandbox Code Playgroud)

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

所以我有两个问题:

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

Phi*_*son 3

  1. 使用您当前在服务器和客户端上的配置,客户端将发送其正在运行的信用额度。因为凭据类型设置为 Windows,这会导致安全协商在域中检查 Kerberos,或者在工作组环境中检查 NTLM。(更多信息可以在这里找到。
  2. 为了调试身份验证过程,WCF 具有可以启用的审核功能。添加审核的说明位于此处

以下是 MSDN 审核页面的重要部分:

<behaviors>
 <behavior name="myAuditBehavior">
  <serviceSecurityAudit auditLogLocation="Application"
    suppressAuditFailure="false" 
    serviceAuthorizationAuditLevel="None" 
    messageAuthenticationAuditLevel="SuccessOrFailure" />
 </behavior>
</behaviors>
Run Code Online (Sandbox Code Playgroud)

并将行为添加到服务中:

<service type="[Your service type here]" behaviorConfiguration="myAuditBehavior">
Run Code Online (Sandbox Code Playgroud)

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

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