5

我有一个调用多个 WCF 服务的 asp.net Web 应用程序。Web 应用程序位于 www.mydomain.com,服务位于 services.mydomain.com。它们托管在同一台服务器上。

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

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

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

所以我有两个问题:

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

1 回答 1

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

以下是审核 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 应用程序的用户的凭据的功能(这称为模拟),则可以在此页面“使用 WCF 的延迟和模拟”上找到有关该文件的 msdn 文档。

于 2012-10-03T17:20:50.287 回答