我目前正在研究从前任那里检索到的 ASP MVC 网站解决方案,并且我必须创建一个活动目录机器来支持使用它的登录实现。
当用户首次登录时,我们会提示他设置密码,并且我们还会更新他的描述(其中包含监控工具中使用的通用帐户状态)。
我的问题如下:
我可以使用这些代码行更改用户的密码(条目是用户的 AD 条目):
entry.Invoke("ChangePassword", new object[] { oldpassword, newPassword });
entry.CommitChanges();
但几行之后,其描述更新失败:
entry.InvokeSet("description", new object[] { UserPasswordStatus.PasswordChanged.ToString() });
entry.CommitChanges();
导致“System.UnauthorizedAccessException:一般访问被拒绝错误”。
当我进入 AD 并将用户的安全性更改为对自己的完全控制(在“SELF”参考中给出)时,这些相同的线路运行良好。
我的问题是:我到底需要更改什么才能允许用户更改其描述?显然,我希望它是通用的并默认应用于所有用户。
您可能注意到,我是一名开发人员,并且不太熟悉服务器管理本身,因此请尝试考虑到这一点:)
答案1
我绝对不建议让 Active Directory 用户完全控制自己的帐户,哪怕是一秒钟。哪怕是一毫秒。总有一天,安全审计员会发现,并抓住这一事实,让你的头脑充满恐惧和怀疑,基本上就是让你讨厌生活。
我甚至不太喜欢让用户有权修改他或她自己的描述的想法,因为很多管理员会利用描述字段来达到自己的目的,他们不希望用户摆弄自己的属性,在描述中加入“诙谐”的流行语以及用户通常会做的类似的事情。
但无论如何,考虑一下这个......
用户帐户从其所在的 OU(组织单位)继承可继承权限。因此,如果您的应用程序的所有用户都位于某个 OU 中,那么您可以修改该 OU 上的 ACL,以便SELF, Allow, Write Description
在该 OU 中创建的每个用户都将继承相同的权限。这实际上可能显示为“写入一般信息”或“写入公共信息”,因为“描述”属性实际上是属性集。这种方法的最大好处是您只需修改一次 ACL,而不是每次用户登录 Web 应用程序时都在代码中动态调整 ACL。
祝你好运,注意管理员SDHolder!
答案2
默认情况下,SELF 身份对多个属性具有写入权限。您可以通过在域级别将写入权限委托给 Description 属性来扩展此功能,但更好的方法可能是在有权修改帐户的服务帐户上下文中执行命令,而不是模拟用户。