2012-07-15 15 views
6

Pregunta:DropNet DropNet de inicio de sesión, ¿cómo hacerlo mediante programación en una aplicación de consola?

estoy usando una API CSharp DropBox desde aquí:
https://github.com/dkarzon/DropNet

De las pruebas unitarias, y la única muestra de trabajo de aquí https://github.com/dkarzon/DropNet/blob/master/DropNet.Samples/DropNet.Samples.Web/Default.aspx.cs

que pensé que funciona como esto:

DropNet.DropNetClient client = new DropNet.DropNetClient(strApiKey, strAppSecret); 

DropNet.Models.UserLogin login = client.GetToken(); 
client.UserLogin = login; 

var accountInfo = client.AccountInfo(); 
str = accountInfo.quota_info.quota.ToString(); 

El probem es, arroja una excepción en accountinfo. (System.Net.HttpStatusCode.Unauthorized) Todo antes funciona bien, obtengo el inicio de sesión (usertoken & usersecret).

Creo que mi problema es esta parte de la aplicación de ejemplo:

var url = _client.BuildAuthorizeUrl(Request.Url.ToString() + "?dropboxcallback=1"); 
Response.Redirect(url); 

Cuando se vuelve a dirigir a selección para un inicio de sesión ... que no tienen una aplicación web, así que no tengo URL. ..

Lo que tengo es una aplicación de consola, que debe hacer una copia de seguridad de mi base de datos todas las tardes automáticamente como un servicio, por lo que es muy malo requerir un navegador web y un usuario que tiene que escribir el correo electrónico/nombre de usuario + contraseña

¿Cómo puedo iniciar sesión proporcionando directamente el nombre de usuario y la contraseña codificados?

Si uso la aplicación de ejemplo, a continuación, funciona, pero que requiere teclear el nombre de usuario y contraseña en la web, y que aspira a lo grande para una aplicación de consola ...

+0

usted está atando para albergar un control de interfaz de usuario en una aplicación de consola? – Paparazzi

+1

No, estoy intentando copiar un archivo a DropBox, verificando primero el espacio disponible (aplicación de la consola). Definitivamente no quiero un control de UI, ni una interfaz de usuario en absoluto. –

Respuesta

1

Es posible, usando SharpBox - probado, funciona.
Se necesita adquirir el AccessToken como una acción única de forma manual, y luego de eso, uno puede omitir la página de inicio de sesión y usar el AccessToken guardado.

http://www.jayway.com/2012/02/06/unboxing-dropbox-and-sharpbox-2/

La línea mágica es:

Globals.DropBox.Token = AppLimit.CloudComputing.SharpBox.StorageProvider.DropBox.DropBoxStorageProviderTools 
.ExchangeDropBoxRequestTokenIntoAccessToken(
     Globals.DropBox.config 
    , Globals.DropBox.AppKey, Globals.DropBox.AppSec 
    , Globals.DropBox.requestToken 
); 
6

Por lo que yo conozco de otras API (Facebook, Google, intercambio de pila, etc.) tendrá que redirigir a su usuario a una página web de Dropbox, donde le otorgará permisos para usar su cuenta para realizar las cosas.

Por lo tanto, en general no es posible lograr esto sin un webbrower. De lo contrario, tendrás que realizar hacks realmente sucios para hackear el sistema de permisos de Dropbox.

Mire el "Flujo de autorizaciones de OAuth 2.0" en google. Aquí es un diagrama que encontré en Yahoo que muestran es como funciona:

The OAuth 2.0 flow

+0

Si esto es cierto ... entonces la API es inútil taaan ... –

+0

Como ya mencioné, podría intentar analizar el HTML resultante usted mismo y extraer los nombres de los cuadros de texto para simular que un usuario ha ingresado sus credenciales y pasarlos a la API. Ten en cuenta que es posible que tengas que hackear algunas cosas como el ID de inicio de sesión que se usa para anti [XSRF] (http://de.wikipedia.org/wiki/Cross-Site_Request_Forgery);) – GameScripting

+0

Estoy tan jodido ... Probé UbuntuOne - Es API (si se puede llamar así) es aún peor. Ahora Google Drive es mi última esperanza. También usa oAuth, así que, probablemente, todavía estoy tan tripulado. Tal vez es hora de escribir mi propio proveedor de almacenamiento en la nube, percibo una brecha en el mercado: hay muchos proveedores de almacenamiento en la nube, pero ninguno tiene una API útil ... –

1

Como GameScripting explicó la API de Dropbox utiliza OAuth que requiere la conexión del usuario a través del sitio web de Dropbox para autenticar los tokens de acceso.

Consulte la documentación aquí: http://dkdevelopment.net/what-im-doing/dropnet/ para el proceso de 3 pasos.

¿Qué tipo de aplicación estás construyendo? El proceso normal es cargar un control de navegador dentro de la aplicación y navegar a la URL de inicio de sesión con él.

también echar un vistazo a la muestra de aplicaciones de Windows Phone para darle una idea de cómo funciona este proceso: https://github.com/dkarzon/DropNet/blob/master/DropNet.Samples/DropNet.Samples.WP7/MainPage.xaml.cs

+0

-> ¿Qué tipo de aplicación estás construyendo? -> aplicación de consola, dije eso en la pregunta, léelo antes de escribir, por favor ... Alguna vez has visto un WebBrowser en una aplicación de consola (Lynx no cuenta, no quiero escribir un navegador de consola para C#) –

+0

¿La aplicación de la consola solo se usará internamente con una sola cuenta de Dropbox?Si es así, probablemente te sugiero que obtengas los tokens manualmente usando una página simple como el ejemplo, luego "codifica" las fichas en la aplicación en lugar del nombre de usuario y la contraseña. – dkarzon

+0

Sí, la información faltante es que debe intercambiar el RequestToken en un token de acceso. Tiene sentido después de todo: la clave pública/privada encripta la contraseña, por lo que nadie puede realizar una ingeniería inversa. –

1

En lugar de codificar el nombre de usuario y contraseña, puede codificar el token de acceso OAuth.

Primero, cree un programa simple (usando la misma clave de aplicación) que sigue el flujo de autorización estándar basado en navegador. Luego utilícelo para autorizar la aplicación con el usuario deseado. Esto le dará un token de acceso OAuth (un "token" y un "secreto token") asociados con ese usuario y la clave de su aplicación.

Luego, en su aplicación de servicio, simplemente codifique el token de acceso OAuth (usando el constructor de 4 argumentos de DropNetClient).

2

Para uisng constructor de 4 argumento del DropnetClient también tenemos que construir URL basado en la web y permitir al usuario para autenticar su cuenta de esto es cosa compusory, accessToken generará cuando el usuario golpeó abrochar en el proceso de autenticación

Cuestiones relacionadas