在网站中,我使用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本身,但它没有任何“角色”。
有没有获得这些信息?
答案 0 :(得分:1)
如果您的代码完全受信任,则可以通过解析SecurityException的FirstPermissionThatFailed属性的XML表示来提取所需信息。但是,为了您检测“可疑”活动的第二个目的,最好只记录SecurityException的ToString()方法的返回值。这将包括被拒绝的PrincipalPermission的详细信息以及发生异常的堆栈跟踪。堆栈跟踪给出的上下文可能非常有用,假设相关支持人员了解如何将其与应用程序结构相关联。