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

时间:2015-03-01 08:04:33

标签: c# ldap authorization rbac abac

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

之前我还没有和LDAP服务器合作过,但据我所知,我们可以为不同的对象定义我们的模式。所以我在网上搜索了一个简单的{{{ 1}}使用resource/action based authorization并且我找不到任何东西(每个人都在谈论用户,群组和角色)

所以我想到了两个问题:

  1. LDAP用于LDAP是否是一个好主意 (因为我找不到如何做到这一点的好例子)
  2. 如果是,我们如何实施呢? (任何谷歌结果都会有所帮助:))
  3. PS:我们的应用程序是用C#编写的。我们可以使用哪些优秀的开源resource-action based authorization客户端,或者我们应该使用.Net LDAP

2 个答案:

答案 0 :(得分:2)

LDAP非常灵活,你可以定义你想要的任何模式,但它不是一个明显的任务。

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

关于.Net库:它是纯粹的" LDAP服务器或Active Directory服务器?
似乎DirectoryServer支持两者,所以我会坚持下去。请注意,对于纯LDAP服务器,您必须使用System.DirectoryServices.Protocols.LdapConnection进行连接。

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

希望这有帮助。

答案 1 :(得分:2)

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

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

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

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

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

您可以在ABAC中表达以下方案:

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

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

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