2012-08-31 25 views
5

Tengo un cliente que desea usar SkyDrive como almacenamiento en la nube para un sitio web. Este sitio web no le pedirá al usuario del sitio su cuenta SkyDrive que le muestre sus archivos, sino que el propietario del sitio web almacenará algunos archivos en SkyDrive y le gustaría compartirlos con los usuarios que iniciaron sesión en su sitio . Mi pregunta es, ¿cómo puedo enviar credenciales a la API de SkyDrive directamente desde el código PHP de fondo del sitio web?¿Cómo se autentica en una sola cuenta de Skydrive y no le pide credenciales al usuario?

Los documentos API en Live Connect (http://msdn.microsoft.com/en-us/library/live/hh243647.aspx) parecen centrarse en presentar al usuario un formulario de inicio de sesión para enviar las credenciales del usuario al servicio. Nuevamente, eso no es lo que quiero. El usuario del sitio web no debería tener que hacer nada más que ir a la página y verán los archivos reflejados desde la cuenta de SkyDrive. Las credenciales se deben almacenar en el servidor y enviarse cuando el usuario solicite la página.

Hice una pregunta similar a esto sobre Google Docs (How do I connect to the Google Calendar API without the oAuth authentication?). La respuesta a esa pregunta fue configurar un script temporal para obtener un token de actualización que podría usarse una y otra vez para autenticarse. Intenté eso y funcionó. Sin embargo, no estoy seguro de cuánto dura el token de actualización y si ese mismo método funcionaría con la API de SkyDrive.

Editar: Después de hacer algunas investigaciones más, el Live Connect Docs (http://msdn.microsoft.com/en-us/library/live/hh826540) dicen:

Después de un usuario da su consentimiento, Live Connect le da a su aplicación un código especial, o token de acceso, que permite a sus la aplicación trabaja con la parte de la información del usuario a la que accedió. Normalmente, este token de acceso es válido durante aproximadamente una hora. Una vez transcurrida esta hora, su aplicación ya no podrá trabajar con la información del usuario; debe solicitar al usuario que vuelva a realizar el proceso de inicio de sesión y consentimiento. Para evitar esto, puede solicitar al usuario que acepte el alcance wl.offline_access. Esto proporciona a su aplicación un código adicional, denominado token de actualización, que su aplicación puede usar para obtener un nuevo token de acceso cada vez que lo necesite, incluso después de que el usuario cierre sesión, por lo general, durante un año. Sin embargo, el usuario puede revocar el acceso de su aplicación en cualquier momento. Si un usuario decide revocar el consentimiento para su aplicación, no funcionarán tokens de acceso o tokens de actualización correspondientes: su aplicación debe solicitar al usuario que vuelva a realizar el proceso de inicio de sesión y consentimiento.

Parece que el token de actualización dura un año. Eso significa que podría manipular algo para obtener un token de actualización, almacenarlo y, en cada solicitud de página, usar el token de actualización para obtener un token de acceso y mostrar los datos. Sin embargo, una vez al año tendría que actualizar el token de actualización para este cliente y almacenarlo. ¿Suena bien y es esta la mejor manera de hacerlo?

+0

Creo que su es como fb no lo es? Simplemente sigue y sigue, si almacena la ficha debería funcionar durante largos períodos de tiempo. No tendrá que mostrar al usuario su página de inicio de sesión al menos una vez, no puede hacerlo sin autorización, por lo tanto, el ejemplo lo muestra. – Sammaye

+0

@Sammaye, por lo que puedo decir, no quiere que el visitante tenga que iniciar sesión en skydrive, pero inicie sesión con una cuenta que el propietario del sitio configure y liste los archivos asociados con esa cuenta para compartir los archivos. Así que liste/comparta archivos de una cuenta de skydrive en su sitio con su sitio que proporciona las credenciales. –

+0

@JonathanKuhn Hmm sí, se puede leer así, es posible que necesite aclarar – Sammaye

Respuesta

1

OAuth 2 tiene un flujo especial exactamente para esto, llamado Client Credentials Grant.

Google ya implementa esto con cuentas de servicio y Los certificados de cliente, como se mencionó en this answer a su otra pregunta.

Sin embargo, Microsoft hasta ahora hace noimplement that flow, por lo que su mejor forma de hacerlo es utilizar la solución provisional que ya está utilizando para Google Docs.

+0

Gracias por la respuesta. Parece que la solución alternativa es la mejor opción para SkyDrive. Sin embargo, si el token de actualización caduca, será una molestia tener que volver a hacer eso, incluso si es una vez al año. –

Cuestiones relacionadas