c# sharepoint authentication active-directory adfs

c# - Autorización de reclamo de ADFS



sharepoint authentication (3)

He jugado con Fiddler. Básicamente, el flujo es el siguiente:

  • Obtener un token de SAML de ADFS
  • Publicarlo en https://login.microsoftonline.com/login.srf (el cuerpo debe ser wa=wsignin1.0, wresult=<requestsecuritytokenresponse>…token…</rstr> and wctx=MEST=0&LoginOptions=2&wa=wsignin1%2E0&rpsnv=2&ct=1343219880&rver=6%2E1%2E6206%2E0&wp=MBI&wreply=https%3A%2F%2Fspirit365%2Esharepoint%2Ecom%2F%5Fforms%2Fdefault%2Easpx&id=500046&cbcxt=mai&wlidp=1&guest=1&vv=910&mkt=EN-US&lc=1033&bk=1343219930
  • Capture la entrada oculta llamada "t" del Formulario
  • PUBLIQUE esa "t" a /_layouts/Authenticate.aspx. Eso debería darle la cookie FedAuth y rtFa.

Desde ese punto, esto es lo mismo que el código aquí: http://www.wictorwilen.se/Post/How-to-do-active-authentication-to-Office-365-and-SharePoint-Online.aspx

Intento conectarme a una instancia de SharePoint Online a través de una aplicación WPF. Encontré este artículo que describe una posible solución, pero el problema es que la instancia específica tiene un Servicio de federación de Active Directory (ADFS) al principio y no sé cómo obtener el auth-token. (No puedo crear un certificado para mi aplicación para autenticar contra los adfs).

¿Alguien que ya ha hecho esto y puede ayudarme con algunos fragmentos de código?


Pasé mucho tiempo para finalmente resolver eso. Para obtener el token binario, debe enviar un mensaje en el siguiente formato a la URL del sitio del Servicio de token de seguridad en línea de Microsoft (STS):

<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing" xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> <s:Header> <a:Action s:mustUnderstand="1">http://schemas.xmlsoap.org/ws/2005/02/trust/RST/Issue</a:Action> <a:ReplyTo> <a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address> </a:ReplyTo> <a:To s:mustUnderstand="1">[toUrl]</a:To> <o:Security s:mustUnderstand="1" xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"> [assertion] </o:Security> </s:Header> <s:Body> <t:RequestSecurityToken xmlns:t="http://schemas.xmlsoap.org/ws/2005/02/trust"> <wsp:AppliesTo xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"> <a:EndpointReference> <a:Address>[url]</a:Address> </a:EndpointReference> </wsp:AppliesTo> <t:KeyType>http://schemas.xmlsoap.org/ws/2005/05/identity/NoProofKey</t:KeyType> <t:RequestType>http://schemas.xmlsoap.org/ws/2005/02/trust/Issue</t:RequestType> <t:TokenType>urn:oasis:names:tc:SAML:1.0:assertion</t:TokenType> </t:RequestSecurityToken> </s:Body> </s:Envelope>

Este mensaje es necesario para reemplazar los tokens con los siguientes valores:

[toUrl]: URL del sitio del servicio de token de seguridad en línea (STS) de Microsoft.
[url]: su URL del sitio SP
[afirmación]: es el token aserción XLM que tienes de tu servicio de federación.

Después de obtener el t=... token binario del XML de respuesta, puede publicarlo en su SP default.aspx para obtener cookies.


Encontré la solución e hice una publicación al respecto. También lo puse en github . Puedes encontrar mi publicación en el blog junto con el enlace github en mi blog .

Espero que esto te ayude tanto como me ayudó a mí :-)