如何使用 LDAP 实现基于 resource/action 的授权?
How to use LDAP to implement a resource/action based authorization?
我们有一个使用 resource/action based authorization
的遗留系统。最近我们公司决定使用 LDAP
服务器作为 Authentication
和 Authorization
的存储库。
我之前没有使用过 LDAP
服务器,但据我所知,我们可以为不同的服务器定义我们的架构 objects.So 我在网上搜索了一个简单的实现示例resource/action based authorization
使用 LDAP
我还没有找到任何东西(每个人都在谈论用户、组和角色)
所以我想到了两个问题:
- 将
LDAP
用于 resource-action based authorization
是个好主意吗
(因为我找不到一个很好的例子来说明如何做到这一点)
- 如果是,我们如何实施? (任何 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 的更多信息:
您需要在要保护的应用程序前部署一个拦截器(策略执行点)。
我们有一个使用 resource/action based authorization
的遗留系统。最近我们公司决定使用 LDAP
服务器作为 Authentication
和 Authorization
的存储库。
我之前没有使用过 LDAP
服务器,但据我所知,我们可以为不同的服务器定义我们的架构 objects.So 我在网上搜索了一个简单的实现示例resource/action based authorization
使用 LDAP
我还没有找到任何东西(每个人都在谈论用户、组和角色)
所以我想到了两个问题:
- 将
LDAP
用于resource-action based authorization
是个好主意吗 (因为我找不到一个很好的例子来说明如何做到这一点) - 如果是,我们如何实施? (任何 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 的更多信息:
您需要在要保护的应用程序前部署一个拦截器(策略执行点)。