我正在我办公室的第一个项目中工作,我们将使用基于索赔授权的“Windows Identity Foundation”。为此,Microsoft .net提供了ClaimsAuthorizationManager抽象类。为了使用这个类,你重载两个方法:构造函数和CheckAccess(context as ClaimsAuthorizationContext)
。构建自定义“ClaimsAuthorizationManager”Windows Identity Foundation类的好方法是什么?
该构造函数设置所有东西;那么当用户访问诸如网页之类的东西时,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类吗?
我看到我终于收到了一个建议。 我自己想出了一种方法来表示用于访问页面或资源的策略,例如minAge(30)+ roleRequired(“Supervisor”),这意味着用户必须至少30岁或担任“主管”角色。我编写了一些二叉树逻辑来将策略组合在一起。 我觉得更困难的是提出一种说法,如果用户想要执行操作A或资源R,那么我们如何确定用户必须拥有哪些策略? – 2010-02-09 16:01:52