如何使用 LDAP 实现基于 resource/action 的授权?

How to use LDAP to implement a resource/action based authorization?

我们有一个使用 resource/action based authorization 的遗留系统。最近我们公司决定使用 LDAP 服务器作为 AuthenticationAuthorization 的存储库。

我之前没有使用过 LDAP 服务器,但据我所知,我们可以为不同的服务器定义我们的架构 objects.So 我在网上搜索了一个简单的实现示例resource/action based authorization 使用 LDAP 我还没有找到任何东西(每个人都在谈论用户、组和角色)

所以我想到了两个问题:

  1. LDAP 用于 resource-action based authorization 是个好主意吗 (因为我找不到一个很好的例子来说明如何做到这一点)
  2. 如果是,我们如何实施? (任何 google 结果都会有所帮助 :) )

PS:我们的应用程序是用 C# 编写的。是否有任何好的开源 LDAP 客户端可供我们使用,或者我们应该使用 .Net DirectoryServices

LDAP 非常灵活,您可以定义任何您想要的架构,但这不是一项显而易见的任务。

我会说它非常适合您的情况,但我知道没有默认架构。谷歌搜索了一下,我发现 this RFC 这可能会给你一个起点。那会符合您的需要吗?

关于 .Net 库:它是“纯”LDAP 服务器还是 Active Directory 服务器?
似乎 DirectoryServer 两者都支持,所以我会坚持下去。请注意,对于纯 LDAP 服务器,您必须使用 System.DirectoryServices.Protocols.LdapConnection.

进行连接

SO entries like this one 可能也会有帮助。

希望这对您有所帮助。

您可以退后一步,看看更大的访问控制/授权用例。如果你想做基于资源操作的授权,你可以推出ABAC,即基于属性的访问控制模型。

ABAC 是 RBAC 和以身份为中心的授权的演变。它由 NIST 设计,该组织是标准化 RBAC 的组织。

使用 ABAC,您的 LDAP 服务器成为属性的来源。属性只是一个键值对。在您的情况下使用 ABAC 的好处是您不需要扩展或更改您的 LDAP 模式。

使用 ABAC,您可以获得以下好处:

  • 您将授权逻辑外化到中央政策决策点
  • 您将授权逻辑表达为策略而不是角色
  • 策略可以使用用户、资源、操作和上下文的任何属性

您可以在 ABAC 中表达以下场景:

  • 如果 document.location==user.location
  • ,具有角色==manager 的用户可以对文档执行操作==edit

XACML,可扩展访问控制标记语言实现 ABAC。您可以在此处阅读有关 XACML 和 ABAC 的更多信息:

您需要在要保护的应用程序前部署一个拦截器(策略执行点)。