我正在尝试使用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);
}
}
答案 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进行身份验证的原因。