构建自定义“ClaimsAuthorizationManager”Windows Identity Foundation类的好方法是什么?

时间:2010-02-01 14:37:26

标签: .net asp.net wif windows-identity claims-based-identity

我正在办公室的第一个项目,我们将使用“Windows Identity Foundation”和基于声明的授权。为此,Microsoft .net提供了ClaimsAuthorizationManager抽象类。要使用此类,您可以覆盖两个方法:构造函数和CheckAccess(context as ClaimsAuthorizationContext)

构造函数设置了所有内容;然后,当用户访问某些内容(例如网页)时,将使用指示用户的参数,要访问的资源以及要对资源执行的操作来调用CheckAccess。例如,可以调用CheckAccess以查看是否应授予用户Bob访问资源http://www.mysite.com/SecretPage.aspx以执行操作GET的权限。 CheckAccess只会返回truefalse。 Windows Identity Foundation使我们能够灵活地以任何可想象的方式实现CheckAccess

在Microsoft提供的代码示例中,CheckAccess配置为仅当用户的生日声明为21岁或以上时才允许用户访问。此策略在web.config中以纯文本形式提供,并在ClaimsAuthorizationManager构造函数中读取。

在我的办公室里,我们使用SQL来跟踪几乎所有的数据,所以在我的情况下。我认为编写ClaimsAuthorizationManager来从SQL读取数据以确定用户是否可以访问资源是有意义的。但是,有许多不同的可能政策。我想创建一个在当前项目中有用的ClaimsAuthorizationManager,并且我可以在将来构建和改进,而不必拆除和替换我今天创建的项目。

在我继续这个项目时,要记住哪些最重要的事情?

更新:我一直致力于将所需索赔政策表示为字符串的系统。我使用二叉树逻辑将策略组合在一起。我维护了一个与“资源”和“行动”相关的索赔数据库。

这里有没有人建立一个ClaimsAuthorizationManager类?

1 个答案:

答案 0 :(得分:1)

我认为你很期待尝试不写死代码,但我认为你已经领先于自己了。

您需要生成一个或多个被视为丢失的尖峰,以确定您自己的特定场景有什么意义。

也就是说,如果所有规则都在db中,请创建一个sproc基本CAM,从配置文件中读取sproc名称。 CheckAccess args不会改变,所以sproc签名可以是不可变的,允许你根据需要将它们切换出来。