【问题标题】:Claims-based authorization, can I avoid exceptions?基于声明的授权,我可以避免异常吗?
【发布时间】:2014-05-15 10:21:20
【问题描述】:

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

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

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

  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 还是让我毛骨悚然!

谢谢!

【问题讨论】:

  • 至于 1) ,为什么要依赖于“开发者”?据我了解基于声明的授权,如果hasAuthorization 返回 false(ClaimsPrincipalPermission 是标准类),标准 .NET 类将引发异常。我实际上在问“它应该依赖异常吗?”之间想知道。或“为什么它依赖异常?”。谢谢
  • 已编辑,应该像这样更窄

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


【解决方案1】:

当然 - 没有什么可以阻止您自己构建 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

【讨论】:

    猜你喜欢
    • 2021-04-13
    • 1970-01-01
    • 2012-11-07
    • 2021-12-04
    • 2012-12-08
    • 1970-01-01
    • 1970-01-01
    • 2017-06-08
    相关资源
    最近更新 更多