【问题标题】:Is there a C# library that behaves like Active Directory's Permissions and Groups?是否有行为类似于 Active Directory 的权限和组的 C# 库?
【发布时间】:2011-05-16 13:39:27
【问题描述】:

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

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

【问题讨论】:

  • 已经存在的Provider模型呢? msdn.microsoft.com/en-us/library/kt5ssstk.aspx
  • @Charlie 谢谢,但我希望管理业务规则,而不仅仅是处理授权。
  • 我明白了,我以前是用RoleProvider来做这个的,然后在服务层中用属性标记方法需要特定的角色来执行。您还可以在视图模型中标记可见道具以显示或隐藏。

标签: c# permissions active-directory authorization usergroups


【解决方案1】:

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

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

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

可以针对 Active Directory 进行配置。

【讨论】:

    【解决方案2】:

    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 等方面有一些经验。这样做非常灵活,并且可以保持一致的架构

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

        如果 AD 对您来说太重,您可以使用 ADAM,它是一种轻型 AD,您可以使用后者提供的 ADSI Edit 进行配置。这是提供的good doc,以及在 SO 上的 configuration question。

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

        【讨论】:

          【解决方案5】:

          两件事。

          第一:

          如果您想与目录交互,您必须在 LDAP API 之上进行编程。据我所知,ADSI 是在 LDAP 之上工作的,但它似乎并不那么独立于 Active Directory。我知道发起mono project 的Novell 编辑了更多independant C# library on the top of LDAP。

          第二:

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

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

          【讨论】:

            【解决方案6】:

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

            【讨论】:

              【解决方案7】:

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

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2011-10-14
                • 2022-12-22
                • 2023-02-23
                • 2017-11-26
                • 1970-01-01
                • 2011-01-12
                • 2010-09-08
                相关资源
                最近更新 更多