使用c#和客户端对象模型(CSOM)

时间:2017-10-10 17:38:50

标签: c# authentication sharepoint office365

我正在尝试使用c#和客户端对象模型(CSOM)连接到SharePoint Online网站。我是外部用户,可以使用我的浏览器访问该URL但是当我以编程方式尝试时,它无法说 - 登录名或密码与Microsoft帐户系统中的名称或密码不匹配。以下是我尝试过的代码示例。我有正确的用户名/密码。任何帮助表示赞赏。

为了增加清晰度 - 我的外部用户看起来像myemail#EXT #@companyname.onmicrosoft.com(@ sign inmyemail替换为下划线)。

string siteUrl = "https://companyname.sharepoint.com/sites/ERCT";
using (ClientContext clientContext = new ClientContext(siteUrl))
{
    var psd = "Password".ToCharArray();
    SecureString secureString = new SecureString();
    foreach (char c in psd) secureString.AppendChar(c);
    //psd.ToList().ForEach(secureString.AppendChar);

    clientContext.Credentials = new SharePointOnlineCredentials("username@companyname.onmicrosoft.com", secureString);
    SP.List oList = clientContext.Web.Lists.GetByTitle("ListName");

    CamlQuery camlQuery = new CamlQuery();
    camlQuery.ViewXml = "<View><RowLimit>100</RowLimit></View>";

    ListItemCollection collListItem = oList.GetItems(camlQuery);

    clientContext.Load(collListItem,
    items => items.Include(
        item => item.Id,
        item => item.DisplayName,
        item => item.HasUniqueRoleAssignments));

    clientContext.ExecuteQuery();

    foreach (ListItem oListItem in collListItem)
    {
        Console.WriteLine("ID: {0} \nDisplay name: {1} \nUnique role assignments: {2}",
        oListItem.Id, oListItem.DisplayName, oListItem.HasUniqueRoleAssignments);
    }
}

3 个答案:

答案 0 :(得分:1)

我已经尝试过您的代码,它在我的租约上运行正常。我安装了&#34; Microsoft.SharePointOnline.CSOM&#34; nuget包。也许试试:

uninstall-package "Microsoft.SharePointOnline.CSOM"
install-package "Microsoft.SharePointOnline.CSOM"

此外,尝试在新的控制台应用程序中运行它。根据您的app.config,可能会有代理等设置。

如果这没有帮助,您也可以尝试fiddler来观看来电。

编辑:也可以尝试使用外部用户的电子邮件地址作为登录名。

答案 1 :(得分:0)

我可以确认SharepointOnlineCredentials与其他租户的外部用户一起使用。我无法将其用于未定义为o365租户的用户。

如CodeMonkey所述,您需要使用Nuget才能获得一组更新的csom库。安装Nuget软件包“ Microsoft.SharePointOnline.CSOM”-这将用CSOM库的较新版本替换您的引用。 请参阅:https://developer.microsoft.com/en-us/office/blogs/using-correct-csom-version-for-sharepoint-customizations/

答案 2 :(得分:0)

CSOM依赖UserProfile服务,如果SharePoint在用户配置文件中找不到用户,则它根本不会对用户进行身份验证。

因此外部用户不属于用户配置文件,这就是为什么他们无法使用CSOM进行身份验证的原因。