我目前正在从一个前辈检索一个ASP MVC网站解决scheme,我不得不创build一个活动目录机器来支持使用它的login实现。
在用户第一次login时,我们会提示他设置密码,我们也会更新他的描述(在moniroting工具中使用通用帐户状态)。
我的问题是以下几点:
我可以使用这些代码行来更改用户的密码(input是用户的ADinput):
entry.Invoke("ChangePassword", new object[] { oldpassword, newPassword }); entry.CommitChanges();
但几行后,其描述更新失败:
entry.InvokeSet("description", new object[] { UserPasswordStatus.PasswordChanged.ToString() }); entry.CommitChanges();
导致“System.UnauthorizedAccessException:一般访问被拒绝错误”。
当我去公元时,并改变用户的安全,以完全控制自己(在“自我”参考给予),这些相同的线路顺利。
我的问题是:我需要改变什么来允许用户改变他的描述? 显然,我希望它是通用的,并默认应用于我的所有用户。
正如你可能注意到的,我是一个开发人员,我不是很习惯服务器pipe理本身,所以请尝试把它考虑在内:)
我绝对build议不要让活动目录用户完全控制他或她自己的帐户,甚至一秒钟。 即使一毫秒。 有一天,安全审计员会发现并locking这个事实,并以恐惧和怀疑的方式着迷你的思想,基本上只会让你讨厌生活。
我甚至不喜欢给用户修改他或她自己的描述的能力,因为很多pipe理员利用这个描述字段来达到自己的目的,而且他们不希望用户用自己的属性把“机智的”stream行语放在他们的描述和那种典型的东西上,用户就是这样做的。
但无论如何,考虑这个…
用户帐户从它们所在的OU(组织单位)inheritance可inheritance的权限。 因此,如果所有应用程序的用户驻留在特定的OU中,则可以修改该OU上的ACL以包含SELF, Allow, Write Description以便在该OU中创build的每个用户都将inheritance相同的权限。 这可能实际上显示为“写入一般信息”或“写入公共信息”,因为“描述”属性实际上是属性集的成员。 这种方法的主要目的是只需要修改一次ACL,而不是在用户每次login到Web应用程序时dynamic调整代码中的ACL。
祝你好运,并注意为AdminSDHolder !
默认情况下,SELF标识具有对多个属性的写入权限。 您可以通过将写权限委派给域级别的Description属性来扩展此function,但更好的方法可能是在具有修改帐户权限的服务帐户上下文中执行命令,而不是模拟用户。
