Аутентификация OOTB-служб Office 365 SharePoint Online - PullRequest
7 голосов
/ 11 ноября 2011

Я хочу использовать данные SharePoint на платформе не .Net. Для этого я уже использую службы OOTB SharePoint, такие как Lists.asmx, Webs.asmx и search.asmx. Я успешно добавил поддержку проверки подлинности на основе форм с использованием Authentication.asmx. Теперь я хочу обеспечить поддержку Office 365 SharePoint в Интернете. Для этого у меня есть демонстрационный сайт SharePoint Online, над которым я работаю. Проблема, с которой я сталкиваюсь, заключается в том, что, когда я использую метод Mode Authentication.asmx, я получаю «Forms» в ответ:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
    <ModeResponse xmlns="http://schemas.microsoft.com/sharepoint/soap/">
        <ModeResult>Forms</ModeResult>
    </ModeResponse>
</soap:Body>
</soap:Envelope>

Однако, когда я использую Login.asmx и передаю правильное имя пользователя и пароль, я получаю ошибку «PasswordNotMatch», те же учетные данные работают нормально в браузере.

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
    <LoginResponse xmlns="http://schemas.microsoft.com/sharepoint/soap/">
        <LoginResult>
         <ErrorCode>PasswordNotMatch</ErrorCode>
            <TimeoutSeconds>0</TimeoutSeconds>
        </LoginResult>
    </LoginResponse>
</soap:Body>
</soap:Envelope>

Примечание: - Это прекрасно работает для сайта FBA без Office 365 SharePoint.

Может ли кто-нибудь помочь мне в реализации поддержки OOTB-служб Office 365 SharePoint Online?

1 Ответ

6 голосов
/ 11 ноября 2011

Я искал похожую идею, и эта тема была чрезвычайно полезна.На самом деле у них есть пример веб-сервиса, использующий PInvoke, он может помочь вам туда добраться.

Редактировать: мой поиск привел меня к этому другому посту Wictor Wilen , нопытаясь пока избежать ClientOM.

Edit2: хорошо, все заработало.Используя код из Wictor выше, я скачал его пример решения и переместил «MsOnlineClaimsHelper.cs» и «WcfClientContracts.cs» в свой проект, позже я буду использовать то, что действительно используется из этих файлов.Я только изменил их, чтобы удалить ссылки ClientOM, включая метод clientContext_ExecutingWebRequest.

В примере приложения MVC3 или приложения консоли:

MsOnlineClaimsHelper claimsHelper = new MsOnlineClaimsHelper("https://my365site.sharepoint.com/sites/enterprise/", "admin@my365site.onmicrosoft.com", "secret");

using (var lists = new SharePointLists.Lists())
{
    lists.Url = @"https://my365site.sharepoint.com/sites/enterprise/_vti_bin/lists.asmx";
    lists.CookieContainer = claimsHelper.CookieContainer;
    var listCol = lists.GetListCollection();
    ViewBag.Message = listCol.InnerXml;
    //Console.Write(listCol.InnerXml);
}
...