6

我喜欢权限和组在 Active Directory 中的工作方式,但我不想真正将我的应用程序与 AD 绑定。

是否有现有的库包含与 AD 相同的功能?尤其是创建组、将用户分配到组、向组添加权限以及查看用户或组的应用权限的能力?

4

7 回答 7

1

也许您可以使用Microsoft-s AzMan-Authorization Manager作为 Active Directory 的包装器。

它包含一个用于编程以请求权限的 API

和一个 gui (azman.msc),您可以在其中定义角色和映射权限并将它们存储在 xml 文件中。

它可以针对 Active Directory 进行配置。

于 2011-05-16T14:07:01.013 回答
1

ActiveDirectoryMembershipProvider 类继承 MembershipProvider。

这意味着您不必将应用程序绑定到 AD 本身,而是绑定到 MembershipProvider 模型。此模型在整个 .net 中使用,并且与内置控件和类一起使用。

这是一个示例

//Any of these will work
ActiveDirectoryMembershipProvider provider = new ActiveDirectoryMembershipProvider();
//SqlMembershipProvider provider = new SqlMembershipProvider();
//MyCustomMemebershipProvider provider = new MyCustomMemebershipProvider();

MembershipProvider membershipProvider = provider;

if (membershipProvider.ValidateUser("username", "password"))
{
    MembershipUser user = membershipProvider.GetUser("username", true);
}
else
{
    //Do something
}

我不是这个模型的专家,但是在对 MembershipProvider 进行子类化和实现 IPrincipal、IIdentity 等方面有一些经验。这样做非常灵活,并且可以保持一致的架构

于 2012-06-15T04:41:39.517 回答
0

两件事情。

第一的 :

如果要与目录交互,则必须在 LDAP API 之上进行编程。据我所知,ADSI 是在 LDAP 之上工作的,但它似乎并不那么独立于 Active Directory。我知道发起mono 项目的 Novell在 LDAP 之上编辑了一个更独立的 C# 库。

第二 :

权限,我的意思是访问控制列表 (ACL) 是一个非标准功能。在 Active Directory 中实现权限的方式与在 Sun e-Directory 中实现权限的方式不同(特殊属性)。例如,在 OpenLDAP 中,权限是在一种访问过滤器中实现的。

我可能(希望)是错的,但我从未听说过有一个库在目录中联合权限。

于 2011-05-17T19:15:01.390 回答
0

我读过的一个库是Rhino Security。它似乎可以处理业务操作的身份验证和授权,可能值得一看。虽然我还没有真正实现它,所以我不知道它的效果如何。

于 2011-05-17T19:19:37.447 回答
0

您可以设置一个免费的 LDAP 服务器,例如OpenLDAP,并使用DirectoryServices访问它,以及任何数量的工具来管理 LDAP 目录。需要一些配置!

使用标准目录服务的优势在于大量的管理工具和支持任意数量应用程序的能力。缺点是学习管理和查询目录。你有什么特别的原因不想使用 AD 吗?如果你在 Windows 上工作,我强烈推荐它而不是大多数反对意见。

于 2011-05-16T13:47:53.100 回答
0

如果 AD 对您来说太重,您可以使用 ADAM,它是一个轻型 AD,您可以使用后者提供的 ADSI Edit 进行配置。这是提供的一个很好的文档,以及关于 SO的配置问题。

此外,您可以使用相同类型的 .NET API(例如System.DirectoryServices.AccountManagement)浏览 ADAM。

于 2011-05-16T13:48:43.117 回答
0

您可以为此使用授权管理器 (AzMan),它是 Windows Server 的一部分。要从 .NET 与它集成,Enterprize Library 5 具有可供您使用的类库类型。

于 2012-05-15T11:47:46.380 回答