7

Desidero utilizzare i dati di SharePoint in una piattaforma non .NET. Uso già i servizi OOTB di SharePoint come Lists.asmx, Webs.asmx e search.asmx per questo scopo. Ho aggiunto con successo il supporto per l'autenticazione basata su form utilizzando Authentication.asmx. Ora, desidero fornire supporto per Office 365 SharePoint online. A tale scopo, ho un sito demo di SharePoint Online a cui sto lavorando. problema, sto affrontando è quando uso il metodo Modalità di Authentication.asmx ottengo 'forme' in risposta:Autenticazione dei servizi OOTB di Office 365 SharePoint Online

<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> 

Tuttavia quando uso Login.asmx e passo corretto username e password, ottengo 'PasswordNotMatch' errore, le stesse credenziali stanno funzionando bene nel browser.

<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> 

Nota: - Funziona perfettamente per un sito FBA non di Office 365 SharePoint.

Qualcuno potrebbe aiutarmi a implementare il supporto per i servizi OOTB di SharePoint Online di Office 365?

risposta

6

Ho cercato un'idea simile e this thread è stato estremamente utile. In realtà hanno un esempio di webservice che usa PInvoke, potrebbe aiutarti ad arrivarci.

Modifica: la mia ricerca mi ha portato a this other post by Wictor Wilen, ma cercando di evitare la ClientOM per ora.

Modifica2: OK, ha funzionato. Usando il codice di Wictor, ho scaricato la sua soluzione di esempio e spostato "MsOnlineClaimsHelper.cs" e "WcfClientContracts.cs" nel mio progetto, giocherò con quello che viene realmente utilizzato da questi file in seguito. Li ho solo modificati per rimuovere i riferimenti di ClientOM incluso il metodo clientContext_ExecutingWebRequest.

In un MVC3 app campione o console app:

MsOnlineClaimsHelper claimsHelper = new MsOnlineClaimsHelper("https://my365site.sharepoint.com/sites/enterprise/", "[email protected]", "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); 
} 
+1

@Kuldeep Shige, come faccio a ottenere l'autenticazione con Forma tipo basata su Office 365 utilizzando il sapone? Ho provato a inviare una richiesta SOAP valida con nome utente/password a "Authentication.asmx", ma ho ottenuto "PasswordNotMatch". – surlac

+1

Non sicuro, è una password semplice? Guarderei la codifica e poi cercherò di ottenere i documenti per vedere se si aspettano la password o una versione hash di esso. –

+1

@ F.Aquino: il codice Wictors non funziona in alcuni casi di Office 365. Ricevo questo errore "Accesso negato. Prima di aprire i file in questa posizione, è necessario innanzitutto accedere al sito Web e selezionare l'opzione per accedere automaticamente. " – Syeda

Problemi correlati