【问题标题】:What's the correct way to implement custom claims in WIF?在 WIF 中实施自定义声明的正确方法是什么?
【发布时间】:2014-02-26 09:31:23
【问题描述】:

我正在尝试在 ASP.NET MVC 应用程序中实现基于声明的安全性。我计划使用 ClaimsPrincipalPermission 类来验证基于资源/操作对的访问。

例如

 [ClaimsPrincipalPermission(SecurityAction.Demand, Operation="Read", Resource="Invoices")]
 [ClaimsPrincipalPermission(SecurityAction.Demand, Operation="Create", Resource="Fees")]

所以现在我需要自定义声明来验证我的操作/资源对。我有不同的资源,它们都有 CRUD 操作。

这是我对自定义声明的想法:

 ((ClaimsIdentity)incomingPrincipal.Identity).AddClaim(new Claim("http://mysoftware.com/identity/claims/invoices", "Read"));

     ((ClaimsIdentity)incomingPrincipal.Identity).AddClaim(new Claim("http://mysoftware.com/identity/claims/fees", "Create"));
         ((ClaimsIdentity)incomingPrincipal.Identity).AddClaim(new Claim("http://mysoftware.com/identity/claims/fees", "Read"));

基本上,每个资源有一个声明类型,声明值可以是读取/创建/更新/删除的组合。这是为使用 CRUD 权限的系统实现自定义声明的正确方法吗?我应该采取不同的做法吗?

谢谢!

【问题讨论】:

    标签: wif


    【解决方案1】:

    通常用户的声明会模拟他们的身份(用户名、电子邮件、角色等),而不一定是他们拥有的权限。在声明授权管理器中,您可以根据用户的身份和正在访问的资源进行数据库查找,然后生成授权结果。

    此外,如果您在 Web 应用程序中执行此操作,内置的 ClaimsPrincipalPermission 有点臭,因为它会引发异常,而您在 Web 应用程序中真正想要的是 401,因此您可以考虑我们拥有的 ResourceActionAuthorizeAttribute在 Thinktecture IdentityModel 帮助库中:https://github.com/thinktecture/Thinktecture.IdentityModel

    【讨论】:

    • 似乎引用的项目已被弃用。对于 MVC5/.net 4.6.1,您推荐什么方法?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-09
    • 2016-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多