asp.net - WCF Windows 身份验证如何在不显式设置凭据的情况下工作

标签 asp.net wcf windows-authentication

我有一个调用多个 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 身份验证。令我惊讶的是,在没有设置客户端凭据的情况下,服务调用也成功了。我假设它必须发送运行网络应用程序的帐户,但不知道如何验证。在其他情况下,我认为我已经看到客户端凭据没有隐式默认值。

所以我有两个问题:
  • 身份验证如何成功?它是否向运行应用程序的用户、浏览器用户的凭据、没有凭据发送?
  • 如何调试/记录/跟踪身份验证过程?我想至少看到正在验证的用户名,以便我可以验证安全性。
  • 最佳答案

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

  • 以下是审核 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 应用程序的用户凭据的功能(这称为模拟),请在此页面“Delagation and Impersonation with WCF”上找到有关该应用程序的 msdn 文档。

    关于asp.net - WCF Windows 身份验证如何在不显式设置凭据的情况下工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12712704/

    相关文章:

    asp.net - Linq 'contains' 查询耗时过长

    c# - JSon 返回一串 HTML 表格显示在 jQuery 数据表的 fnopen 中

    .net - 读取 MTOM 数据时已超出最大缓冲区大小

    wcf - WCF 的所有可用替代品是什么?

    php - LAMP 服务器上的 Windows 身份验证

    javascript - ASP.NET - 如何从页面检查用户控件中文本框的值?

    c# - 从原始 HTML/CSS 内容从 ASP.NET 生成 PDF?

    web-services - 为什么我要使用 WCF 以外的任何东西?

    ssl - 带有 https 和 kerberos 的 HAProxy

    Angular 7 Windows 身份验证登录弹出窗口未显示