【问题标题】:What are good ways to architect a custom "ClaimsAuthorizationManager" Windows Identity Foundation class?构建自定义“ClaimsAuthorizationManager”Windows Identity Foundation 类的好方法是什么?
【发布时间】: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 的访问权限以执行操作GETCheckAccess 只返回 truefalse。 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


【解决方案1】:

我认为你期待不写死代码是令人鼓舞的,但我认为你正在超越自己。

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

也就是说,如果您的所有规则都在数据库中,请创建一个 sproc 基础 CAM,该 CAM 从配置文件中读取 sproc 名称。 CheckAccess 参数不会更改,因此 sproc 签名可以是不可变的,允许您根据需要将它们切换出去。

【讨论】:

  • 我写了一些代码。我可以编写和解析一个字符串,该字符串表示用户的声明必须满足的标准,但是我无法弄清楚如何将策略与资源和操作相关联......我认为在我的数据库中,它将需要多个表来指示“资源”和“行动”到“政策”的映射
  • 我确实有一个 ClaimsAuthorizationManager 的工作原型,它要求用户具有访问指定网页的角色。
猜你喜欢
  • 1970-01-01
  • 2012-08-30
  • 1970-01-01
  • 1970-01-01
  • 2012-01-03
  • 1970-01-01
  • 2019-10-23
  • 2021-12-28
  • 2012-02-15
相关资源
最近更新 更多