2010-02-01 14 views
3

我正在我办公室的第一个项目中工作,我们将使用基于索赔授权的“Windows Identity Foundation”。为此,Microsoft .net提供了ClaimsAuthorizationManager抽象类。为了使用这个类,你重载两个方法:构造函数和CheckAccess(context as ClaimsAuthorizationContext)构建自定义“ClaimsAuthorizationManager”Windows Identity Foundation类的好方法是什么?

该构造函数设置所有东西;那么当用户访问诸如网页之类的东西时,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类吗?

+0

我看到我终于收到了一个建议。 我自己想出了一种方法来表示用于访问页面或资源的策略,例如minAge(30)+ roleRequired(“Supervisor”),这意味着用户必须至少30岁或担任“主管”角色。我编写了一些二叉树逻辑来将策略组合在一起。 我觉得更困难的是提出一种说法,如果用户想要执行操作A或资源R,那么我们如何确定用户必须拥有哪些策略? – 2010-02-09 16:01:52

回答

1

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

您需要产生一个或多个被视为丢弃的尖峰,以确定自己对于特定场景的意义。这就是说,如果你的所有规则都在db中,那么创建一个从配置文件中读取sproc名称的sproc基本CAM。 CheckAccess参数不会改变,因此sproc签名可以是不可变的,允许您根据需要切换它们。

+0

我写了一些代码。我可以编写和解析表示用户声明必须符合哪些条件的字符串,但我无法弄清楚如何将策略与资源和操作相关联...... 我认为,在我的数据库中,它将需要多个表来指示将“资源”和“操作”映射到“策略” – 2010-02-09 16:04:02

+0

我确实有一个ClaimsAuthorizationManager的工作原型,要求用户具有访问角色指定的网页。 – 2010-02-09 16:04:46

相关问题