【发布时间】:2014-05-15 10:21:20
【问题描述】:
我刚刚开始了一份新工作,并被分配为改进现有应用程序的首要任务。这个应用程序是一个简单的配置文件管理器,具有配置文件创建、版本......并使用基于声明的授权来确定当前用户是否能够创建新的配置文件。
由于我不熟悉这种授权系统,所以我阅读了很多关于它的信息,更新了应用程序的安全声明,现在可以正常工作了。
但是,有些事情让我很困扰。据我了解,检查一个动作的可能性有两种结果:
- 您可以这样做(即自定义声明管理器实现返回
true),没有任何反应,很酷。 - 不允许你这样做(授权经理返回
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