当前位置:编程学习 > 网站相关 >>

WCF的安全审核——记录谁在敲打你的门

WCF所谓的安全审核就是针对认证和授权所做的针对EventLog的日志记录。我们不但可以设置进行审核的事件(认证成功/失败,授权成功或失败),还可以选择记录信息被写入的EventLog类型,即应用程序日志(Application)还是安全日志(Security)。WCF的安全审核是通过ServiceSecurityAuditBehavior服务行为实现的。

一、ServiceSecurityAuditBehavior服务行为

针对WCF安全审核的编程只涉及ServiceSecurityAuditBehavior服务行为。下面给出了定义在ServiceSecurityAuditBehavior中具体审核行为进行控制的三个可读写的属性

 

1: public sealed class ServiceSecurityAuditBehavior : IServiceBehavior

                 2: {

                 3:     //其他成员

                 4:     public AuditLogLocation AuditLogLocation { get; set; }

                 5:     public AuditLevel MessageAuthenticationAuditLevel { get; set; }

                 6:     public AuditLevel ServiceAuthorizationAuditLevel { get; set; }

                 7:     public bool SuppressAuditFailure { get; set; }

                 8: }

 

属性AuditLogLocation代表的是日志信息被写入的EventLog类型,该属性的类型是一个具有如下定义的AuditLogLocation枚举。其中Application和Security分别代表应用程序日志和安全日志。如果选择Default,则最终日志被写入的位置决定于当前的操作系统。如果支持写入安全日志,则选择安全日志类型,否则选择应用程序日志类型。Default是默认选项

 

 1: public enum AuditLogLocation

                 2: {

                 3:     Default,

                 4:     Application,

                 5:     Security

                 6: }

 

6: }MessageAuthenticationAuditLevel和ServiceAuthorizationAuditLevel两个属性分别代表针对认证和授权审核的级别。所谓审核的级别在这里指的应该在审核事件(认证和授权)在成功或者失败的情况下进行日志记录。审核级别通过具有如下定义的AuditLevel枚举表示。Success和Failure代表分别针对认证/授权成功和失败进行审核日志。SuccessOrFailure则意味着不管认证/授权是成功还是失败,都会进行审核日志。None为默认值,表示不进行审核日记记录

		

 

                

 

 

 

                 。

 

 

                 1: public enum AuditLevel

                 2: {

                 3:     None,

                 4:     Success,

                 5:     Failure,

                 6:     SuccessOrFailure

                 7: }

布尔类型的SuppressAuditFailure属性表示审核日志失败是否会影响应用本身。在默认的情况下该属性值为True,意味着为认证和授权进行审核日志的时候出现的异常不会对应用(服务)本身造成任何影响。

 

既然是服务行为,我们就可以通过将创建的ServiceSecurityAuditBehavior添加到服务的行为列表的方式来进行安全审核的控制。当然我们还是推荐采用配置的方式来进行安全什么的相关设置。服务行为ServiceSecurityAuditBehavior对应的配置节是<serviceSecurityAudit>。在下面的配置中,我定义了一个包含了ServiceSecurityAuditBehavior的服务行为,并对其四个属性进行了显式设置。

 

                 1: <configuration>

                 2:   <system.serviceModel>    

                 3:     <behaviors>

                 4:       <serviceBehaviors>

                 5:         <behavior ...>

                 6:           <serviceSecurityAudit auditLogLocation ="Application"

                 7:                                 messageAuthenticationAuditLevel ="Failure"

                 8:                                 serviceAuthorizationAuditLevel="SuccessOrFailure"

                 9:                                 suppressAuditFailure="true"/>

   

补充:综合编程 , 安全编程 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,