获得“访问被拒绝”。尝试更新UserPrincipal对象时

时间:2016-04-19 14:07:30

标签: c# sharepoint active-directory sharepoint-2013 directoryservices

我有一个带有自定义应用程序的SharePoint解决方案,用户应该可以在自己的Active Directory对象中更改某些属性。

我正在做以下事情:

PrincipalContext ctx = ActiveDirectory.GetPrincipalContext("lab");
UserPrincipal user = ActiveDirectory.GetUserPrincipal(ctx, "Administrator");

user.DisplayName = user.DisplayName + DateTime.Now.ToString("ddMMyyyyHHmmss");
user.Save();

我以域管理员身份登录SharePoint,我正在尝试更改自己的DisplayName。

我的代码出了什么问题?

2016年4月20日更新

我使用以下代码构建了一个小型控制台应用程序:

    static void Main(string[] args)
    {
        try
        {
            PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "lab");
            UserPrincipal user = UserPrincipal.FindByIdentity(ctx, "administrator");

            DirectoryEntry de = (user.GetUnderlyingObject() as DirectoryEntry);

            user.DisplayName = user.DisplayName + DateTime.Now.ToString("ddMMyyyyHHmmss");
            user.Save();

            Console.WriteLine("OK");
            Console.ReadKey();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }

这很好用!这通常意味着身份验证出错或登录到SharePoint的用户未习惯连接到AD并执行更改。如果是这种情况,我怎么能找到我正在进行操作的用户?

更新20.04.2016 - 2

我现在尝试将用户名和密码放在PrincipalContext构造函数中,如下所示:

PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "lab", "administrator", "pass");

这也有效!这绝对意味着登录到SharePoint的用户不会用于创建PrincipalContext。但为什么? 通常代码总是在当前用户的上下文中执行!

如何找出用于创建PrincipalContext的用户以及如何更改登录用户的使用方式?

0 个答案:

没有答案