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

C# 在Active Directory用户属性中保存自定义用户角色,c#,.net,active-directory,roles,directoryentry,C#,.net,Active Directory,Roles,Directoryentry,是否可以在Active Directory用户中保存自定义字符串?例如,包含用户角色列表的字符串用分号分隔?例如,DirectoryEntry包含类似于userRoles的内容,其值为read;写或类似的东西 我正在尝试使用c#设置和访问这些信息 非常感谢 基本上,您有三种选择 如果您的组织中安装了Exchange,它将自动在AD中添加extensionAttribute1-15,可用于存储用户定义的数据 您可以使用未使用的字段(如physicalDeliveryOffice)来存储自定义数据

是否可以在Active Directory用户中保存自定义字符串?例如,包含
用户角色列表的字符串
用分号分隔?例如,
DirectoryEntry
包含类似于
userRoles
的内容,其值为
read;写或类似的东西

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


非常感谢

基本上,您有三种选择

  • 如果您的组织中安装了Exchange,它将自动在AD中添加extensionAttribute1-15,可用于存储用户定义的数据
  • 您可以使用未使用的字段(如physicalDeliveryOffice)来存储自定义数据
  • 如果(大前提)您可以让网络管理员相信这一好处,那么您实际上可以扩展active directory模式来存储您自己的用户定义数据
  • 在所有情况下,您都会查询这些字段(例如使用)以与数据交互。不过,Active Directory并不意味着它是一个事务数据库。如果您需要存储应用程序可以访问的有关用户的自定义数据,那么最好查看ASP.NET成员资格和角色(较旧但经过验证的技术)或ASP.NET标识之类的内容。因为我更熟悉会员资格和角色,所以我将以它为例。身份验证(成员资格)和授权(角色)方面是分开的,这意味着可以使用内置提供程序使用AD对用户进行身份验证,但随后使用自定义角色提供程序实现(例如)根据SQL数据库、web服务、XML文件检查其角色成员资格,或者任何你能想到的。您甚至可以检查多个源(如广告组和SQL数据库),如果性能有问题,可以实现缓存,等等

    Active Directory有一些缺点,例如:

    • 开发人员通常不会控制它,这意味着在您需要扩展应用程序的任何时候都会遇到繁文缛节
    • 根据查询的方式,与SQL数据库之类的数据库相比,性能可能非常差
    • 祝您好运,说服服务器人员在某些错误损坏您的自定义数据的情况下恢复Active Directory
    • 不能保证新的网络管理员实习生不会决定在您的自定义字段中粘贴一些其他不兼容的数据
    • 如果您想从应用程序中更新现场数据,您必须说服您的网络管理员/安全人员,您的应用程序可以以安全的方式执行此操作,而不会让用户修改其他更重要的数据

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

    虽然您已经接受@DVK答案作为解决方案,但我想在他的答案之上添加一些内容供您考虑
    Active Directory轻型目录服务
    ADLDS
    非常适合您尝试完成的任务。谢谢,我来看看:)