transferir sincronizar otra one herramientas google cuenta con avanzado archivos c# .net oauth-2.0 google-drive-sdk oauth2client

c# - sincronizar - Transferir la propiedad de los documentos de Google Drive



transferir archivos de onedrive a google drive (1)

Finalmente encontré una respuesta.

Podría impersonalizar una cuenta usando la siguiente construcción:

Gracias a todos, quienes trataron de ayudarme!

var initializer = new ServiceAccountCredential.Initializer(ServiceAccountId) { Scopes = scope, User = AdminEmail1 }; var credential = new ServiceAccountCredential(initializer.FromCertificate(certificate)); var driveService = new DriveService(new BaseClientService.Initializer() { HttpClientInitializer = credential, ApplicationName = ApplicationName });

Desarrollamos aplicaciones en C # que necesitan transferir la propiedad de todos los documentos de Google Drive relacionados con el dominio de cortina a un único usuario determinado sin el permiso del propietario original. Estamos utilizando una versión de prueba de la cuenta comercial de Google Apps.

En principio, tenemos que hacer esto: http://screencast.com/t/effVWLxL0Mr4 pero en el código C #.

Acorde a la documentación, se implementa en OAuth2 como funcionalidad superadmin. https://support.google.com/a/answer/1247799?hl=es (1). Pero el documento estaba en desuso y más no encontramos ninguna llamada API para hacer eso.

Al usar la cuenta del creador del proyecto, parece que no puede acceder a todos los archivos y no puede ver los archivos. No se comparte con él.

En la Consola de administración de Google, al administrar el acceso del cliente API, le agregamos derechos de acceso para acceder a los archivos sin permiso a los archivos sin permiso. Enlace: screencast.com/t/zU9cc6Psyb . Agregamos rutas de acceso de rutas allí de acuerdo con el enlace del documento: trovepromo-tf.trove-stg.com/0m1-sds/support.google.com/a/answer/162106?hl=es y lo intentamos de nuevo. No funcionó...

Además, descubrimos que necesitamos usar una cuenta de servicio para tener acceso a todos los datos de todos los usuarios del dominio, por lo tanto, generamos claves de API para el enlace de la cuenta de servicio: screencast.com/t/rNKuz6zchwV en el proyecto creado y se autenticaron en la aplicación usando el siguiente código:

var certificate = new X509Certificate2(@"C:/Temp/key.p12", "notasecret", X509KeyStorageFlags.Exportable); ServiceAccountCredential credential = new ServiceAccountCredential( new ServiceAccountCredential.Initializer("Service account email") { User= "[email protected]", Scopes = new[] { DriveService.Scope.Drive } }.FromCertificate(certificate));

pero cuando tratamos de obtener la lista de carpetas, obtenemos un error: " access_denied ", Descripción: "Requested client not authorized.", Uri:""

Ayúdenos a transferir la propiedad de un usuario a otro por cuenta de servicio.

Actualización del 13-08-2014:

Querido, Parece que tengo un problema con la impersonalización del usuario.
1) Cuando uso api para conectar en nombre del usuario. Durante la autenticación, redirige al navegador y solicita permisos. Después de eso todo está completamente bien, puedo manipular con carpetas excepto una cosa: no puedo transferirle la propiedad 2) Cuando uso la cuenta de servicio sin impersonalización, la autenticación es como la siguiente:

ServiceAccountCredential credential = new ServiceAccountCredential( new ServiceAccountCredential.Initializer(ServiceAccountId) { Scopes = new[] { DriveService.Scope.Drive, DriveService.Scope.DriveAppdata, DriveService.Scope.DriveFile, DriveService.Scope.DriveScripts, DirectoryService.Scope.AdminDirectoryUser, DirectoryService.Scope.AdminDirectoryGroup, DirectoryService.Scope.AdminDirectoryOrgunit, DirectoryService.Scope.AdminDirectoryUserReadonly }, }.FromCertificate(certificate));

Luego puedo acceder a todos los archivos compartidos en la cuenta del servicio pero (nuevamente) no puedo transferir los derechos.

3) Luego trato de impersonalizar la cuenta de servicio agregando una cuenta de correo electrónico de administrador al usuario. User = [email protected]

ServiceAccountCredential credential = new ServiceAccountCredential( new ServiceAccountCredential.Initializer(ServiceAccountId) { Scopes = new[] { DriveService.Scope.Drive, DriveService.Scope.DriveAppdata, DriveService.Scope.DriveFile, DriveService.Scope.DriveScripts, DirectoryService.Scope.AdminDirectoryUser, DirectoryService.Scope.AdminDirectoryGroup, DirectoryService.Scope.AdminDirectoryOrgunit, DirectoryService.Scope.AdminDirectoryUserReadonly }, User = AdminEmail, }.FromCertificate(certificate));

Entonces tengo un error: "access_denied", descripción: "cliente solicitado no autorizado.", Uri: ""

¿Cómo puedo impersonalizar la cuenta de servicio correctamente?

Actualizado el 13-08-2014

Descubrimos que la API básica para la autenticación está aquí: https://developers.google.com/accounts/docs/OAuth2ServiceAccount#creatingjwt

Normalmente, todo lo que mostré antes es una implementación .net del protocolo.

¿Cómo podemos hacer una impersonalización del usuario en el código .net? No encontramos ninguna implementación de .net en funcionamiento.