【发布时间】:2011-01-11 18:04:21
【问题描述】:
我正在我的办公室开展第一个项目,我们将使用“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 类?
【问题讨论】:
-
我看到我终于收到了建议。就我自己而言,我想出了一种将访问页面或资源的策略表示为字符串的方法,例如 minAge(30)+roleRequired("Supervisor") 意味着用户必须至少 30 岁或在“主管”的角色。我编写了一些二叉树逻辑来将策略组合在一起。我发现更困难的是想出一种说法,如果用户想要执行操作 A 或资源 R,那么我们如何确定用户必须拥有哪个策略?
标签: .net asp.net wif windows-identity claims-based-identity