65.9K
CodeProject 正在变化。 阅读更多。
Home

配置 ASP.NET 身份验证日志

starIconstarIconstarIconstarIconemptyStarIcon

4.00/5 (1投票)

2013 年 11 月 21 日

CPOL

1分钟阅读

viewsIcon

15773

如何配置 ASP.NET 身份验证日志

引言

一些时间以前,我写过一篇关于 ASP.NET 健康监视 的文章 – 这是 .NET 框架提供的一种日志记录基础设施,可以通过 web.config 轻松配置。 在那篇文章中,我展示了心跳和错误事件。 今天,我想向您展示如何收集 ASP.NET 身份验证审计日志。 为了这个目的,全局 web.config 中注册了特殊的事件组

        <healthMonitoring>
            ...
            <eventMappings>
                ...
                <add name="All Audits" 
                type="System.Web.Management.WebAuditEvent,
                 System.Web,Version=4.0.0.0,Culture=neutral,
                 PublicKeyToken=b03f5f7f11d50a3a"
                    startEventCode="0" endEventCode="2147483647" />
                <add name="Failure Audits" 
                type="System.Web.Management.WebFailureAuditEvent,
                 System.Web,Version=4.0.0.0,Culture=neutral,
                 PublicKeyToken=b03f5f7f11d50a3a"
                    startEventCode="0" endEventCode="2147483647" />
                <add name="Success Audits" 
                type="System.Web.Management.WebSuccessAuditEvent,
                 System.Web,Version=4.0.0.0,Culture=neutral,
                 PublicKeyToken=b03f5f7f11d50a3a"
                    startEventCode="0" endEventCode="2147483647" />
            </eventMappings>
        </healthMonitoring>

然而,使用 所有审计 集合会导致您的应用程序为每个服务请求生成一个审计事件。 如果我们随后将这些事件存储在 SQL Server 数据库中,可能会给服务器带来沉重的负载。 在这篇文章中,我将向您展示如何将审计事件的数量减少到登录尝试,然后安全地将其存储在数据库中。

配置

首先,让我们创建必要的表

aspnet_regsql -A w -d Logowanie -S db-master.srv.trader.pl 
              -sqlexportonly c:\temp\forms-audit-schema.sql

然后,我们需要在我们的 web.config 中添加 healthMonitoring 部分启用它。 我们还将为成功和错误身份验证事件创建事件映射

    <healthMonitoring enabled="true">
      ...
      <eventMappings>
        <add name="AuthenticationSuccess" 
         type="System.Web.Management.WebAuthenticationSuccessAuditEvent,System.Web,
         Version=4.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a" />
        <add name="AuthenticationFailure" 
         type="System.Web.Management.WebAuthenticationFailureAuditEvent,System.Web,
         Version=4.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a" />
      </eventMappings>
      ...
    </healthMonitoring>

下一步是为我们的日志数据库创建一个连接字符串(或使用现有的连接字符串),并为我们的日志事件添加一个提供程序

    <healthMonitoring enabled="true">
      <providers>
        <add connectionStringName="DB_Logowanie" buffer="false" 
         name="MsSqlAuditWebEventProvider" type="System.Web.Management.SqlWebEventProvider, 
         System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"  />
      </providers>
      ...
    </healthMonitoring>

在上面的配置中,我故意禁用了缓冲,以确保所有事件都将存储在数据库中。 对于真正的高负载,您可以 启用缓冲 并将 bufferMode 设置为 关键通知

最后,我们需要将事件与我们的提供程序绑定

    <healthMonitoring enabled="true">
      ...
      <rules>
        <add name="MsSql Auth Success Critical" eventName="AuthenticationSuccess" 
         provider="MsSqlAuditWebEventProvider" profile="Critical" />
        <add name="MsSql Auth Failure Critical" eventName="AuthenticationFailure" 
         provider="MsSqlAuditWebEventProvider" profile="Critical" />
      </rules>
      ...
    </healthMonitoring>

检查身份验证日志内容

在将上述设置应用于您的应用程序后,审计事件应该开始出现在 aspnet_WebEvent_Events 表中。 看看它们揭示了哪些信息

示例成功身份验证事件

Event code: 4002
Event message: Membership credential verification succeeded.
Event time: 11/20/2013 2:13:55 PM
Event time (UTC): 11/20/2013 1:13:55 PM
Event ID: c7096dc16a26445cba2b6f67919c0a1a
Event sequence: 2300
Event occurrence: 1
Event detail code: 0

Application information:
    Application domain: /LM/W3SVC/1693641394/ROOT/logowanie-4-130294218493519428
    Trust level: Full
    Application Virtual Path: /logowanie
    Application Path: \\ASP.Net\TestApp\logowanie\
    Machine name: WEB-02

Process information:
    Process ID: 6920
    Process name: w3wp.exe
    Account name:TEST\iis_zrodla

Request information:
    Request URL: https:///logowanie/logon
    Request path: /logowanie/logon
    User host address: 172.20.11.150
    User:
    Is authenticated: False
    Authentication Type:
    Thread account name: TEST\iis_zrodla

Name to authenticate: peter.null@test.pl

示例身份验证失败事件

Event code: 4006
Event message: Membership credential verification failed.
Event time: 11/20/2013 2:20:23 PM
Event time (UTC): 11/20/2013 1:20:23 PM
Event ID: 8e1a137591ad43feb596f00a23bf5ec7
Event sequence: 4706
Event occurrence: 12
Event detail code: 0

Application information:
    Application domain: /LM/W3SVC/1693641394/ROOT/logowanie-3-130294169828149952
    Trust level: Full
    Application Virtual Path: /logowanie
    Application Path: \\ASP.Net\TestApp\logowanie\
    Machine name: WEB-17

Process information:
    Process ID: 3584
    Process name: w3wp.exe
    Account name: TEST\iis_zrodla

Request information:
    Request URL: https:///logowanie/logon
    Request path: /logowanie/logon
    User host address: 172.20.11.150
    User:
    Is authenticated: False
    Authentication Type:
    Thread account name: TEST\iis_zrodla

Name to authenticate: peter.notnull@test.pl

历史

  • 2013 年 11 月 21 日:初始版本
© . All rights reserved.