ASP.NET身份 - 如何管理声明?

时间:2015-11-16 21:21:13

标签: asp.net asp.net-identity asp.net-web-api claims-based-identity claims

我想在Web Api项目中实现基于声明的授权。我理解声明的想法,可以手动向用户添加声明并基于它来授权请求​​。但是,我不知道如何管理声明,将它们分配给用户并在将来更新它们。

例如,假设我对此实体的CRUD操作有Product实体和ProductCreate,ProductRead,ProductUpdate和ProductDelete声明。所以我有几个问题:

  1. 我可以将声明存储在数据库中,但在注册时向用户添加“默认”声明的最佳方法是什么?
  2. 如果我添加新功能以列出仅在用户拥有ProductList声明时授权的产品 - 新用户会获得此声明,但我如何将此声明添加到系统中的所有现有用户?
  3. 与用户相关的声明数量是否有限制?在具有许多实体的更大系统中,用户可能最终获得数百个声明
  4. 正如我所说,我知道如何将声明添加到用户等等,但它更像是在现实世界中如何管理声明和用户的过程。

    谢谢!

    UPDATE 谢谢Brendan,感谢您的帮助!我不知道我是否误解了一些基本的东西,或者答案是否正在盯着我 - 无论哪种方式,我都没有得到它。

    所以我有web api,并希望对不同的控制器方法进行细化访问。作为管理员,我希望获得所有电话的授权,所以我应该拥有所有的声明。注册用户应具有对某些方法的读取权限,并且您作为主持人应该具有更新并创建对某些方法的访问权限。我的理解是这些声明应该存储在DB(我的情况下是SQL服务器)的某个地方,并在用户注册时“分配”给用户。使用Asp.Net Identity,每个用户的声明都将存储在AspNetUserClaims表中,因此当他们登录时,默认情况下会在令牌中获得所有声明。 Simples!

    我缺少的是如何处理在用户注册时应分配给用户的声明,主持人应该获得的声明等等以及如何添加/删除权限的过程。由于在系统中添加新的声明需要重建和新部署,因此在代码中使用它似乎不对。

    此外,如果我添加了需要针对不同类型用户的新声明的新功能,我将如何确保下次现有用户登录时获得新声明以及第一次声明时分配的新声明注册。

    我希望我有意义,我可能会把一些基于角色的思考与一些基于声明的思考混在一起,这可能是我困惑的根源。我还没有看到任何关于如何在现实世界中管理许多声明的应用程序的示例。

    再次感谢!

1 个答案:

答案 0 :(得分:1)

我遇到了完全相同的问题和问题。我找到的只是关于如何使用经理类创建声明的信息,但没有关于在何处管理这些声明的信息。

可以为用户提供不同的访问组合,如果我的用户界面是与我的API断开连接的用户界面,我认为我不希望ui为我管理这些声明。

除了使用声明表创建声明管理器类之外,您是否认为可以使用内置的任何内容?