我正在办公室的第一个项目,我们将使用“Windows Identity Foundation”和基于声明的授权。为此,Microsoft .net提供了ClaimsAuthorizationManager抽象类。要使用此类,您可以覆盖两个方法:构造函数和CheckAccess(context as ClaimsAuthorizationContext)
。
构造函数设置了所有内容;然后,当用户访问某些内容(例如网页)时,将使用指示用户的参数,要访问的资源以及要对资源执行的操作来调用CheckAccess
。例如,可以调用CheckAccess
以查看是否应授予用户Bob
访问资源http://www.mysite.com/SecretPage.aspx
以执行操作GET
的权限。 CheckAccess
只会返回true
或false
。 Windows Identity Foundation使我们能够灵活地以任何可想象的方式实现CheckAccess
!
在Microsoft提供的代码示例中,CheckAccess
配置为仅当用户的生日声明为21岁或以上时才允许用户访问。此策略在web.config中以纯文本形式提供,并在ClaimsAuthorizationManager
构造函数中读取。
在我的办公室里,我们使用SQL来跟踪几乎所有的数据,所以在我的情况下。我认为编写ClaimsAuthorizationManager
来从SQL读取数据以确定用户是否可以访问资源是有意义的。但是,有许多不同的可能政策。我想创建一个在当前项目中有用的ClaimsAuthorizationManager
,并且我可以在将来构建和改进,而不必拆除和替换我今天创建的项目。
在我继续这个项目时,要记住哪些最重要的事情?
更新:我一直致力于将所需索赔政策表示为字符串的系统。我使用二叉树逻辑将策略组合在一起。我维护了一个与“资源”和“行动”相关的索赔数据库。
这里有没有人建立一个ClaimsAuthorizationManager类?
答案 0 :(得分:1)
我认为你很期待尝试不写死代码,但我认为你已经领先于自己了。
您需要生成一个或多个被视为丢失的尖峰,以确定您自己的特定场景有什么意义。
也就是说,如果所有规则都在db中,请创建一个sproc基本CAM,从配置文件中读取sproc名称。 CheckAccess args不会改变,所以sproc签名可以是不可变的,允许你根据需要将它们切换出来。