在Active Directory用户属性中保存自定义用户角色

时间:2016-05-16 19:30:26

标签: c# .net active-directory roles directoryentry

是否可以在Active Directory用户中保存自定义字符串?例如,一个字符串,其中包含用分号分隔的user-roles列表?例如,DirectoryEntry包含userRoles之类的值为read;write;或类似内容的内容?

我尝试使用c#设置和访问这些信息。

非常感谢!

1 个答案:

答案 0 :(得分:1)

你基本上有三种选择。

  1. 如果您的组织中安装了Exchange,它将自动在AD中添加extensionAttribute1 - 15,可用于存储用户定义的数据。
  2. 您可以使用未使用的字段(例如physicalDeliveryOffice)来存储自定义数据。
  3. IF(大如果)您可以说服您的网络管理员获益,您实际上可以扩展活动目录架构以存储您自己的用户定义数据。
  4. 在所有情况下,您都可以查询这些字段(例如,使用System.DirectoryServices.AccountManagement)与数据进行交互。但是,Active Directory并不是一个事务性数据库。如果您需要存储可由应用程序访问的用户的自定义数据,那么最好看看ASP.NET成员资格和角色(较旧但经过验证的技术)或ASP.NET身份等内容。由于我更熟悉会员资格和角色,我将以此为例。身份验证(成员身份)和授权(角色)方面是分开的,这意味着可以使用内置提供程序使用AD对您的用户进行身份验证,然后使用自定义角色提供程序实现(例如)根据SQL检查其角色成员身份数据库,Web服务,XML文件或其他您可以想到的其他内容。您甚至可以检查多个源(例如AD组和SQL数据库),如果性能有问题则实现缓存,等等。

    Active Directory有一些缺点,例如:

    • 开发人员通常不会控制它,这意味着只要您需要扩展应用程序就需要繁文缛节
    • 根据您的查询AD的方式,与SQL数据库相比,性能可能非常差
    • 祝你好运,如果某些错误损坏了你的自定义数据,说服服务器人员恢复Active Directory
    • 无法保证新的网络管理员实习生不会决定在自定义字段中粘贴其他一些不兼容的数据
    • 如果您想要从应用程序更新字段中的数据,您将不得不说服您的网络管理员/安全人员,您的应用程序可以以安全的方式执行此操作,而不会冒用户修改其他更重要的风险数据

    因此,尽管可以在AD中存储自定义数据,但这通常是不受欢迎的,劳动密集型的,并且不安全。