基于声明的授权,是否可以避免异常

本文关键字:授权 是否 可以避免 异常 于声明 声明 | 更新日期: 2023-09-27 17:56:30

我刚刚开始了一份新工作,并被分配为改进现有应用程序的第一个任务。这个应用程序是一个简单的配置文件管理器与配置文件创建,版本....并使用基于声明的授权来确定当前用户是否能够(例如)创建新的配置文件。

由于我不熟悉这种授权系统,我阅读了很多关于它的信息,更新了应用程序的安全声明,现在可以正常工作。

但是,有些事情让我很困扰。据我了解,检查操作的可能性有两个结果:

  1. 您可以这样做(即自定义声明管理器实现的返回true),什么也没发生,很酷。
  2. 不允许这样做(授权管理器返回false)。抛出异常,在我的客户端中捕获,然后将canCreateProfile变量转换为 false。

一个标准的例子是这样的:

try
{
    ClaimsPrincipalPermission.CheckAccess(Resource.Profile.ToString(), ResourceAction.Create.ToString());
}
catch
{
    return false;
}

井。。。我觉得这相当令人不安。一个典型的使用示例:如果我是只读用户,则每次选择新配置文件时都会触发三个异常。不慢,但不知何故令人不安

基于声明的授权实际上是否仅依赖于异常,或者是否有一种方法可以直接使用布尔值?

反正A first chance exception of type 'System.Security.SecurityException' occurred in Microsoft.IdentityModel.dll让我毛骨悚然!

谢谢!

基于声明的授权,是否可以避免异常

当然 - 没有什么能阻止你自己构建 AuthorizationContext(设置资源、操作和主体)并手动调用 AuthorizationManager。您可以通过 FederatedAuthentication 类访问它。

这是 MVC/Web API 的一个例子http://leastprivilege.com/2012/10/26/using-claims-based-authorization-in-mvc-and-web-api/

更新至 v5/v2https://github.com/thinktecture/Thinktecture.IdentityModel/blob/master/source/Thinktecture.IdentityModel.WebApi/ResourceActionAuthorizeAttribute.cs

这是基础管道:https://github.com/thinktecture/Thinktecture.IdentityModel/blob/master/source/Thinktecture.IdentityModel.Core/ClaimsAuthorization.cs