.net 如何在不增加异常的情况下管理Windows身份验证基础中的访问? 在Windows身份基础(WIF)中,有一个类叫做 CalimsPrimalPalpult。有关MSDN的文档非常稀少。它说:

.net 如何在不增加异常的情况下管理Windows身份验证基础中的访问? 在Windows身份基础(WIF)中,有一个类叫做 CalimsPrimalPalpult。有关MSDN的文档非常稀少。它说:,.net,security,authorization,wif,windows-identity,.net,Security,Authorization,Wif,Windows Identity,ClaimsPrincipalPermission表示访问资源所需的权限。ClaimsPrincipalPermission接受一个表示要访问的资源的字符串和一个表示要对该资源执行的操作的字符串。调用Demand时,主体必须具有对指定资源执行指定操作的权限,否则Demand会引发异常 这很酷。它允许我在一个函数上设置一个属性,并使之成为只有授权用户才能调用该函数。我很容易让这个功能正常工作 然而,还有另一个问题。我正在开发一个web应用程序,它有许多功能,只有特定的用户才能访问。我希望对我的页面

ClaimsPrincipalPermission表示访问资源所需的权限。ClaimsPrincipalPermission接受一个表示要访问的资源的字符串和一个表示要对该资源执行的操作的字符串。调用Demand时,主体必须具有对指定资源执行指定操作的权限,否则Demand会引发异常

这很酷。它允许我在一个函数上设置一个属性,并使之成为只有授权用户才能调用该函数。我很容易让这个功能正常工作

然而,还有另一个问题。我正在开发一个web应用程序,它有许多功能,只有特定的用户才能访问。我希望对我的页面进行编码,使其仅显示登录用户可以访问的功能页面的链接

我认为使用ClaimsPrincipalPermission进行此操作的唯一方法是执行以下操作:

我的主管向我明确表示,这种“例外编码”是不可接受的。我确信我可以将这种东西封装在一个小的库中,但我想知道WIF打算如何用于此

顺便说一句,我知道WIF允许我自动检查对特定网页的访问,但该项目的架构师希望指定要限制的功能名称,而不是网页URL

最好的做法是什么

更新


到目前为止,我发现最好的方法是通过异常封装编程以减轻后果…

哪些用户/角色/可以访问某些页面的内容存储在某个表中?如果是,你有权使用它吗?数据库中是否也有用户对某些功能的权限?如果是、是和是,那么您希望通过自己的对象模型,而不是WIF,更直接地从db呈现页面上的链接。这会很干净。根据WIF提供的信息对菜单选项进行编码(我认为必须在每一页上进行编码?)听起来既乏味又笨重。

也许已经晚了几年,但您希望与
ClaimsAuthorizationManager进行交互。

AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
Thread.CurrentPrincipal = ClaimsPrincipal.CreateFromPrincipal(Thread.CurrentPrincipal);

ClaimsAuthorizationManager cam = new ClaimsAuthorizationManager();
if (cam.CheckAccess(new AuthorizationContext((IClaimsPrincipal)Thread.CurrentPrincipal, "SECRET_FUNCTION", "EXECUTE")))
{
    Response.Write(Link_To_Execute_Secret_Function) 
}
AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
Thread.CurrentPrincipal = ClaimsPrincipal.CreateFromPrincipal(Thread.CurrentPrincipal);

ClaimsAuthorizationManager cam = new ClaimsAuthorizationManager();
if (cam.CheckAccess(new AuthorizationContext((IClaimsPrincipal)Thread.CurrentPrincipal, "SECRET_FUNCTION", "EXECUTE")))
{
    Response.Write(Link_To_Execute_Secret_Function) 
}