ZurabWeb
Creé una aplicación del lado del servidor en PHP que se supone que funciona con las hojas de cálculo de Google.
Puedo autenticarme correctamente con la autenticación OAuth 2.0, pero cuando solicito la lista de hojas de cálculo de Google, solo obtengo las hojas de cálculo compartidas con la cuenta de servicio por parte del propietario de la hoja de cálculo.
¿Hay alguna forma en que la cuenta de servicio pueda recuperar todas las hojas de cálculo que pertenecen a mi cuenta principal y no a la del servicio, incluidas aquellas que no se comparten explícitamente con la cuenta de servicio?
También quiero mantener las hojas de cálculo privadas para que nadie pueda acceder a ellas sin mi permiso, pero necesito la cuenta de servicio para tener acceso total a las hojas de cálculo existentes y nuevas.
Cualquier consejo es apreciado.
Aquí hay una secuencia de comandos de muestra que usa una cuenta de servicio para leer el contenido de una hoja de cálculo de Google. Eche un vistazo al LÉAME para obtener instrucciones sobre cómo configurarlo:
-
Lo que obtuve de este LÉAME es que debe compartir la hoja de cálculo de Google con la dirección de correo electrónico de la cuenta de servicio. Eso resolvió mi problema.
– Dustin Michels
14 de marzo de 2019 a las 19:43
-
Sí, eso es verdad. Por alguna razón, para una nueva hoja en la que estoy trabajando cuando trato de compartirla con un correo electrónico de cuenta de servicio, Hojas me dice que hay un error. ¿Por qué podría ser este el caso?
– ariestav
6 oct 2020 a las 20:23
Tienes que cambiar de enfoque:
-
Cree una cuenta de servicio en Drive. Puede administrar y usar esta cuenta solo con la API (no con la interfaz web como de costumbre)
-
Con Drive API puede enumerar, crear, actualizar, eliminar y cambiar los permisos de los archivos. Cuando crea un nuevo archivo, puede compartirlo, siempre con API, con los usuarios que desee, hacer público el nuevo archivo o cambiar la propiedad.
Por favor echa un vistazo: https://developers.google.com/drive/v2/reference/permissions
Supongo que usa Google Apps y no una cuenta personal de GMail. Puede utilizar su cuenta de servicio para personificar tu cuenta principal.
Tenga en cuenta que aquí estoy hablando de una cuenta de servicio en la forma en que Google la entiende: una clave privada (en formato p12) y un identificador. Esta no es una cuenta de Google Apps utilizada con fines técnicos. Más información aquí.
Esto se hace por:
- Autorizar su cuenta de servicio en su dominio de Google Apps
- Modifica el código que usas para generar las credenciales de la API
Los pasos son exactamente los mismos para la API de hoja de cálculo y para la API de Drive.
Para autorizar primero su cuenta de servicio para hacerse pasar por los usuarios del dominio, puede seguir esta documentación. Aquí están los pasos básicos. Debe ser un superadministrador de dominio para realizar esta tarea.
- Ve a la consola de administración de tu dominio de Google Apps: https://admin.google.com
- Seleccione Seguridad de la lista de controles. si no ves Seguridad en la lista, seleccione Más controles de la barra gris en la parte inferior de la página, luego seleccione
Seguridad de la lista de controles. - Seleccione Ajustes avanzados de la lista de opciones.
- Seleccione Administrar el acceso de clientes OAuth de terceros
en el Autenticación sección. - En el Nombre del cliente ingrese el ID de cliente de la cuenta de servicio. En el Uno o más ámbitos de API ingrese la lista de ámbitos a los que se debe otorgar acceso a su aplicación. En su caso, ese sería al menos el alcance de la API de hoja de cálculo: https://hojas de cálculo.google.com/feeds
Cuando haya terminado, debe actualizar su código para que se haga pasar por su cuenta principal:
$key = file_get_contents($SERVICE_ACCOUNT_PKCS12_FILE_PATH);
$auth = new Google_AssertionCredentials(
'YOUR_SERVICE_ACCOUNT_EMAIL',
array('https://spreadsheets.google.com/feeds'),
$key);
$auth->sub = 'yourmainaccount@domain.com';
A continuación, puede utilizar el $auth
variable para generar los tokens de OAuth que necesita para acceder a la API de hoja de cálculo. No estoy seguro de qué cliente usa para esto, por lo que la forma en que inyecta el token de acceso dependerá del cliente que use.
Además, tenga en cuenta que este token caducará después de 1 hora y luego la API comenzará a regresar Session Expired
errores Si su cliente no maneja esto automáticamente, deberá detectar el error y regenerar el token.
-
Desafortunadamente es una cuenta de Gmail.
– ZurabWeb
1 de diciembre de 2014 a las 15:21
-
Luego, debe otorgar a su aplicación los derechos de su cuenta principal, no una cuenta de servicio. Puede restringir esos derechos solo a la hoja de cálculo.
– David
2 de diciembre de 2014 a las 2:01
-
Pero no puedo tener un archivo de autenticación .p12 para la cuenta principal, solo para el servicio uno.
– ZurabWeb
2 de diciembre de 2014 a las 20:06
-
Es decir, OAuth 2.0 para la cuenta principal sin la interacción del usuario no funcionará.
– ZurabWeb
2 de diciembre de 2014 a las 20:07
-
Hay más problemas que eso. Los usuarios deberán iniciar sesión en su cuenta de Google, y eso es si realmente tienen una, de lo contrario, deberán registrarse, lo que requerirá que proporcionen su número de teléfono a Google y cosas por el estilo. Problema.
– ZurabWeb
03/12/2014 a las 15:55
Aclare: ¿en qué se diferencia su pregunta de stackoverflow.com/questions/14187030/… o stackoverflow.com/questions/14124946/…
– Bar Foo
21 de noviembre de 2014 a las 20:02
1. Las hojas de cálculo no forman parte de la API de Google Drive, según tengo entendido hasta ahora. 2. No creo que pueda otorgar a la cuenta de servicio el acceso autorizado con la cuenta de servicio.
– ZurabWeb
21 de noviembre de 2014 a las 20:16
¿Cómo hacer lo contrario? Tengo una hoja de cálculo que se crea mediante la emisión de llamadas a la API de Google en la cuenta de servicio y no puedo acceder a ella. Dice que el acceso está restringido. ¿Cómo explicarle a Google que quiero crear una hoja de cálculo que se comparta con otros y no solo con la cuenta de servicio?
– Señor D.
11 de febrero a las 7:25