Pregunta

Necesito que PHP se autentique en un servidor de intercambio. Una vez que pueda conectarme con éxito, necesitaré escribir solicitudes webdav en PHP para poder extraer datos del servidor de intercambio y usarlos en una aplicación web.

Sería algo simple, excepto que el servidor Exchange 2003 tiene activada la autenticación basada en formularios (FBA). Con FBA activado, creo que se supone que debo hacer lo que dice el siguiente artículo del blog (ver enlace). Mi problema es que necesito ayuda para convertir sus instrucciones para ASP en PHP.

http: / /blogs.msdn.com/webdav_101/archive/2008/12/12/webdav-fba-authentication-sample-explained.aspx

¿Alguien entiende los detalles de lo que está describiendo en este artículo? Cualquier idea ayudaría.

Información más específica si es necesario: estoy confundido sobre cómo configurar la solicitud POST (quiero decir, cuando normalmente POSTAS datos en un formulario, ¿no sueles cargar la página en la que publicas? En sus instrucciones, él dice ENVIARLO a /exchweb/bin/auth/owaauth.dll. ¿Cómo funciona esto?)

También estoy confundido acerca de cómo hacer el tercer paso en la lista: 3) WebReq.KeepAlive y AllowAutoRedirect deben establecerse en True en la solicitud.

Además de eso, realmente podría usar algo de ayuda que detalla cómo tomar los datos de la publicación y ponerlos en una cookie en PHP.

¡Gracias de antemano por cualquier ayuda brindada!

¿Fue útil?

Solución

Creo que la mejor manera de hacerlo es a través de curl. ( http://ca.php.net/curl )

En la página vinculada, el primer ejemplo es una buena clase para usar (la he usado para iniciar sesión automáticamente en otros sitios web)

Debe tener KeepAlive (encabezado) y Redirigir de forma predeterminada ( curl_setopt ($ process, CURLOPT_FOLLOWLOCATION, 1); )

Deberá asegurarse de que el servicio web pueda crear / modificar cookie.txt y luego intente:

$cc = new cURL();
$cc->post('http://www.yourexchange.com','destination=https%3A%2F%2F' . $strServerName . '%2Fexchange%2F' . $strUserName . '%2F&username=' . $strDomain . '%5C' . $strUserName . '&password=' . $strPassword . '&SubmitCreds=Log+On&forcedownlevel=0&trusted=0'); 

Lo anterior es una traducción rápida de la información en la página a la que se vinculó, es posible que deba usar urlencode () en sus variables si hay caracteres especiales. Una vez que lo anterior funcione correctamente, puede usar

$page=$cc->get('http://www.yourexchange.com/?whatever=youneed');

La página $ contendrá el resultado de la cadena de get (envía la cookie almacenada en el archivo de texto en esta solicitud) y luego puede usar expresiones regulares para obtener lo que necesita.

Esto debería acercarte mucho a lo que necesitas.

Otros consejos

Parece que el archivo de texto se llama realmente "cookies.txt". Puede crear un archivo de texto en blanco con este nombre y subirlo al mismo directorio. En su cliente ftp debería poder establecer permisos, creo que 777 es el código de permiso que necesitará. Si no puede ingresar el código de permiso, intente marcar todas las casillas para otorgar todos los permisos.

re: última publicación,

eso es correcto, donde el script se ejecuta es básicamente un cliente y el archivo de cookies es una forma sencilla de almacenar la cookie para una fácil reutilización.

Cadena,

Sí, esto se refiere a un archivo llamado cookies.txt (nota: " cookies " con una " s ") en la misma carpeta que su archivo de código curlclass.php .

cURL usa esto para almacenar y enviar cookies en solicitudes posteriores. Está en lo cierto al suponer que el servidor web que ejecuta el script PHP está actuando como el cliente; básicamente, inicia sesión en el servidor de Exchange simulando una POST en el formulario de inicio de sesión, y luego guarda la cookie y la envía con cada solicitud, tal como lo haría un navegador.

Cree el archivo cookies.txt y configure los permisos para que el usuario que ejecuta su instancia de Apache pueda escribir en el archivo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top