如何在PrincipalPermissionAttribute需求失败时找到所需的角色?

时间:2011-09-07 10:37:23

标签: c# security

在网站中,我使用PrincipalPermission属性来限制对某些方法的访问。

这是一个典型的例子:

class Program
{
    static void Main(string[] args)
    {
        Foo();
    }

    [System.Security.Permissions.PrincipalPermission(System.Security.Permissions.SecurityAction.Demand, Role = "Winners")]
    static void Foo()
    { }
}

如果主体不在指定的角色中,则.net基础结构会抛出System.Security.SecurityException,并显示通用消息“请求主体权限失败”。

如果权限检查失败,我想记录PrincipalPermission所需的角色。这对我们的支持人员非常有用,他们可以将角色分配给用户和/或监视日志以查看是否发生了任何可疑事件。显然出于安全目的,最终用户仍将看到通用的未授权消息。我已经浏览了SecurityException本身,但它没有任何“角色”。

有没有获得这些信息?

1 个答案:

答案 0 :(得分:1)

如果您的代码完全受信任,则可以通过解析SecurityException的FirstPermissionThatFailed属性的XML表示来提取所需信息。但是,为了您检测“可疑”活动的第二个目的,最好只记录SecurityException的ToString()方法的返回值。这将包括被拒绝的PrincipalPermission的详细信息以及发生异常的堆栈跟踪。堆栈跟踪给出的上下文可能非常有用,假设相关支持人员了解如何将其与应用程序结构相关联。