使用 Office 365/SharePoint Online 进行客户端身份验证

5

我有一个客户端应用程序,它使用SharePoint Web服务(list.asmx)。最近,SharePoint迁移到了SharePoint Online。现在,身份验证失败了。

这可能是因为SharePoint Online中的身份验证机制不同。我参考了文章http://www.wictorwilen.se/Post/How-to-do-active-authentication-to-Office-365-and-SharePoint-Online.aspx进行身份验证。但由于某些原因,我现在遇到了身份验证错误。

请注意,我的客户端是一个服务,我不希望弹出身份验证窗口。

请问是否有人能够给我一些指针/示例工作应用程序,以便与SharePoint Online进行身份验证?

Atul Sureka

2个回答

14

SharePoint Online (SPO)使用基于声明的身份验证模式。微软发布了SharePoint Online Client Components SDK,其中包含SharePointOnlineCredentials类,可用于在SPO中进行SharePoint Web服务身份验证。

如何在SharePoint Online(SPO)中验证SharePoint Web服务

以下示例演示如何检索身份验证 Cookie:

private static CookieContainer GetAuthCookies(Uri webUri, string userName, string password)
{
    var securePassword = new SecureString();
    foreach (var c in password) { securePassword.AppendChar(c); }
    var credentials = new SharePointOnlineCredentials(userName, securePassword);
    var authCookie = credentials.GetAuthenticationCookie(webUri);
    var cookieContainer = new CookieContainer();
    cookieContainer.SetCookies(webUri, authCookie);
    return cookieContainer;
}

例子

string sourceUrl = "https://contoso.sharepoint.com/Documents/SharePoint User Guide.docx";
string destinationUrl = "https://contoso.sharepoint.com/Documents/SharePoint User Guide 2013.docx";
FieldInformation[] fieldInfos;
CopyResult[] result;
byte[] fileContent;
using(var proxyCopy = new Copy())
{
     proxyCopy.Url = webUri + "/_vti_bin/Copy.asmx";
     proxyCopy.CookieContainer = GetAuthCookies(webUri, userName, password);

     proxyCopy.GetItem(sourceUrl,out fieldInfos,out fileContent);
     proxyCopy.CopyIntoItems(sourceUrl,new []{ destinationUrl}, fieldInfos, fileContent, out result);
 }

参考文献


10
你可以使用SharePoint客户端对象模型登录到SharePoint在线。如果使用用户名和密码进行身份验证,而不是OAuth方法,则不会弹出身份验证窗口。
关于如何操作,请参考此文章

@Matt,我有点卡住了,我正在尝试使用Office365进行身份验证,并尝试获取他/她的SharePoint网站地址及其中的整个目录。我能成功吗? - Khawaja Asim
@KhawajaAsim,你的意思是你有用户名和密码,想要获取根目录下的所有网站集合? - Matt
@Matt,我只有通过弹出窗口(login.microsoftonline.com)成功登录后得到的office365 API验证令牌。我该如何获取用户Sharepoint主机URL? - Khawaja Asim
@KhawajaAsim,根据我的了解,您只能使用PowerShell命令来完成此操作:https://learn.microsoft.com/en-us/powershell/msonline/v1/get-msoldomain - Matt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接