基于声明的授权,我可以避免例外吗?

时间:2014-04-03 14:03:55

标签: c# wpf security claims-based-identity

我刚开始一份新工作,并被指定为改善现有应用的第一项任务。此应用是一个简单的个人资料管理器,其中包含个人资料创建,版本....并使用基于声明的授权来确定当前用户是否能够创建新的个人资料。

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

但是,有些事困扰我。据我了解,检查行动的可能性有两个结果:

  1. 您被允许这样做(即自定义理赔经理实施了返回true),没有任何反应,很酷。
  2. 您不被允许这样做(授权经理返回false)。抛出异常,在我的客户端中捕获,然后将canCreateProfile变量变为false。
  3. 标准的例子是:

    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无论如何都给了我毛骨悚然!

    谢谢!

1 个答案:

答案 0 :(得分:0)

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

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

已更新至v5 / v2 https://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