我有一堂課,課堂用ClaimsPrincipalPermissionsAttribute
裝飾。該班有一個方法,也用ClaimsPrincipalPermissionsAttribute
裝飾。我期望的是:在課程級別和方法級別申請ClaimsPrincipalPermissionAttribute時出現異常
首先,當我實例化類時,我接到一個調用我的自定義ClaimsAuthorizationManager
。這按預期工作。
二,當我打電話給我的方法時,我得到兩個電話給我的ClaimsAuthorizationManager
。一個來自類級別屬性的資源和操作,另一個來自方法級別屬性。這不起作用。相反,當我調用該方法時,我得到了一個SecurityException
。例外消息是:
對嵌入的權限集對象解碼失敗。
要嘗試查看發生了什麼,我通過複製ClaimsPrincipalPermissionsAttribute
的代碼創建了自定義屬性。我可以看到在我的屬性上調用CreatePermission()
方法,並且它成功返回ClaimsPrincipalPermission,但在調用ClaimsAuthorizationManager
之前拋出異常。
我的代碼如下所示:
using System;
using System.IdentityModel.Services;
using System.Security.Permissions;
namespace ConsoleApplication5
{
class Program
{
static void Main(string[] args)
{
var test = new SecuredClass();
test.MethodLevelSecuredMethod();
Console.ReadKey();
}
}
[ClaimsPrincipalPermission(SecurityAction.Demand, Resource = "SecuredClass", Operation = "GeneralAccess")]
class SecuredClass
{
[ClaimsPrincipalPermission(SecurityAction.Demand, Resource = "MethodLevelSecuredMethod", Operation = "Call")]
public void MethodLevelSecuredMethod()
{
Console.WriteLine("Called MethodLevelSecuredMethod");
}
}
}
我在做什麼錯?是否可以在類和方法級聲明屬性?
我正在使用.Net 4.5。
我嘗試這個解決方案,並進入了其他問題。當上面的CheckAccess方法被調用並且返回false時 - 在System.IdentityModel.Services(mscorlib.dll)中拋出System.Reflection.TargetInvocationException之前拋出了System.Security.SecurityException。因此,這使得它很難捕獲安全異常,因爲它是由targetinvocationexception包裝的 – David