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

Save custom user roles in Active Directory user properties

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

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

非常感谢!

您基本上有三种选择。

  1. 如果您的组织中安装了Exchange,它会自动在AD中添加extensionAttribute1 - 15,可用于存储用户定义的数据。
  2. 您可以使用未使用的字段(例如 physicalDeliveryOffice)来存储自定义数据。
  3. 如果(如果)您可以说服您的网络管理员获益,您实际上可以扩展 Active Directory 架构来存储您自己的用户定义数据。

在所有情况下,您都会查询这些字段(例如使用 System.DirectoryServices.AccountManagement)以与数据交互。不过,Active Directory 并不意味着是一个事务性数据库。如果您需要存储有关您的用户的自定义数据,您的应用程序可以访问这些数据,您最好看一下 ASP.NET 成员资格和角色(较旧但经过验证的技术)或 ASP.NET 身份。由于我对 Membership 和 Roles 比较熟悉,所以我将以它为例。身份验证(成员资格)和授权(角色)方面是分开的,这意味着您的用户可以使用内置提供程序使用 AD 进行身份验证,然后使用自定义角色提供程序实现(例如)根据 SQL 数据库、网络服务、XML 文件,或任何您能想到的东西。您甚至可以检查多个来源(例如 AD 组和 SQL 数据库),如果性能有问题则实施缓存,等等。

Active Directory 有一些缺点,例如:

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

因此,虽然可以在 AD 中存储自定义数据,但这通常是不可取的、劳动密集型的且不安全的。