如何使用LDAP来实现基于资源/操作的授权



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

我以前没有使用过LDAP服务器,但据我所知,我们可以为不同的对象定义模式。因此,我在网上搜索了一个使用LDAP实现resource/action based authorization的简单示例,但我没有找到任何内容(每个人都在谈论用户、组和角色)

所以我想到了两个问题:

  1. LDAP代替resource-action based authorization是个好主意吗(因为我找不到如何做到这一点的好例子)
  2. 如果是,我们如何实施?(任何谷歌搜索结果都会有所帮助:)

附言:我们的应用程序是用C#编写的。有没有什么好的开源LDAP客户端可以使用,或者我们应该使用.Net DirectoryServices

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

ABAC是RBAC和以身份为中心的授权的发展。它是由NIST设计的,与标准化RBAC的组织相同。

使用ABAC,LDAP服务器将成为属性的来源。属性只是一个键值对。在您的案例中使用ABAC的好处是,您不需要扩展或更改LDAP架构。

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

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

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

  • 如果文档.location==user.location,则具有经理角色的用户可以对文档执行操作==编辑

可扩展访问控制标记语言XACML实现了ABAC。你可以在这里阅读更多关于XACML和ABAC的信息:

  • ABAC:NIST项目页面
  • XACML简介&架构

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

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

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

关于.Net图书馆:它是一个";纯";LDAP服务器还是Active Directory服务器
DirectoryServer似乎同时支持两者,所以我会坚持使用它。注意,对于纯LDAP服务器,您必须使用System.DirectoryServices.Protocols.LdapConnection进行连接。

所以像这样的条目可能也会有所帮助。

希望这能有所帮助。

最新更新