【问题标题】:How to initialize the client context from another user's account如何从另一个用户的帐户初始化客户端上下文
【发布时间】:2018-05-09 05:16:00
【问题描述】:

目前,我正在处理从非 SharePoint 页面调用的 .net Web api,以运行 SharePoint 代码以执行某些操作。我已经共享了已配置的 Visual Studio,以便每个人都可以通过我系统的 IP URL 访问该页面。 Web api 中的代码运行良好,因为它总是使用我的帐户来执行每个操作。

如果我有用户的域名,我们如何从另一个用户帐户运行客户端上下文。

ClientContext clientContext = new ClientContext(siteUrl);
Web web = clientContext.Web;
User user = web.EnsureUser(@"domain\user1");
clientContext.Load(user);
clientContext.ExecuteQuery();
string title = user.Title;
string loginName = user.LoginName;

如果我想在这个用户名下运行clientcontext。我怎样才能做到这一点。我发现下面的代码在服务器端有效

SPUserToken userToken = web.AllUsers[user].UserToken;
SPSite s = new SPSite(siteStr, userToken);
SPWeb w = s.OpenWeb();
Console.WriteLine("Currently logged in as: " +
                  w.CurrentUser.ToString() +
                  "(" + w.CurrentUser.Name + ")"
                 );

此代码在 CSOM 中的替代方法是什么。

提前致谢

【问题讨论】:

    标签: sharepoint-2013 impersonation csom


    【解决方案1】:

    我们可以使用NetworkCredential方法来传递用户凭证,下面的代码sn-p供大家参考:

    using (ClientContext context = new ClientContext("http://yourserver/")) {
        context.Credentials = new NetworkCredential("user", "password", "domain");
        List list = context.Web.Lists.GetByTitle("Some List");
        context.Load(list);
        context.ExecuteQuery();
    
        //do something
    }
    

    参考Authentication when using the SharePoint client object model

    【讨论】:

    • 感谢您的回答,但无法传递密码,因为系统将进行 AD 身份验证,我认为无论如何我们都无法从 AD 获取密码。跨度>
    • 您可以自定义用户登录的登录页面。或者作为一种解决方法,您可以创建自定义 Web 服务并使用服务器端对象模型来模拟用户,然后在客户端使用 Web 服务。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-20
    • 1970-01-01
    • 2013-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多