7

Quiero consumir datos de SharePoint en una plataforma que no sea .Net. Ya uso los servicios OOTB de SharePoint como Lists.asmx, Webs.asmx y search.asmx para este propósito. He agregado con éxito el soporte para autenticación basada en formularios usando Authentication.asmx. Ahora, quiero brindar soporte para Office 365 SharePoint en línea. Para ese propósito, tengo un sitio demo de SharePoint Online en el que estoy trabajando. problema, estoy frente es cuando se utiliza el método del modo de Authentication.asmx consigo 'formas' en la respuesta:Autenticación de Office 365 SharePoint Online Servicios OOTB

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

Sin embargo cuando uso y paso Login.asmx nombre de usuario y la contraseña correctos, recibo el mensaje 'PasswordNotMatch' error, las mismas credenciales funcionan bien en el navegador.

<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: - Esto funciona perfecto para un sitio FBA no Office 365 SharePoint.

¿Podría alguien ayudarme por favor a implementar la compatibilidad con los servicios de Office 365 SharePoint Online OOTB?

Respuesta

6

He estado buscando una idea similar y this thread ha sido extremadamente útil. En realidad, tienen una muestra de servicio web que usa PInvoke, podría ayudarlo a llegar allí.

Editar: mi búsqueda me llevó a this other post by Wictor Wilen, pero tratando de evitar el ClientOM por el momento.

Edit2: bien, tengo esto funcionando. Usando el código de Wictor anterior, descargué su solución de muestra y moví "MsOnlineClaimsHelper.cs" y "WcfClientContracts.cs" a mi proyecto, estaré jugando con lo que realmente se usa de estos archivos más adelante. Solo los cambié para eliminar las referencias de ClientOM, incluido el método clientContext_ExecutingWebRequest.

En una aplicación MVC3 muestra o consola de aplicación:

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, ¿cómo iba a conseguir autenticado con el tipo basada en el Formulario de Office 365 utilizando SOAP? Intenté enviar una solicitud SOAP válida con nombre de usuario/contraseña a "Authentication.asmx", pero obtuve "PasswordNotMatch". – surlac

+1

No estoy seguro, ¿es una contraseña simple? Me gustaría ver la codificación y luego tratar de obtener los documentos para ver si esperan la contraseña o una versión hash de la misma. –

+1

@ F. Achino: el código de Wictors no funciona en algunos casos de Office 365. Recibo este error "Acceso denegado. Antes de abrir archivos en esta ubicación, primero debe buscar el sitio web y seleccionar la opción para iniciar sesión automáticamente. " – Syeda

Cuestiones relacionadas