ver sincronizar persona otra movil iam google exportar desde create crear compartir compartido compartida como calendarios calendario agenda google-app-engine google-calendar-api google-account service-accounts

google-app-engine - sincronizar - service account google



¿Quién es el propietario de los calendarios creados por la cuenta de servicio a través de la API de Google Calendar y cómo se pueden compartir? (3)

Digamos que tengo una cuenta de Google [email protected] con el proyecto project-1 (configurado como aplicación de Google App Engine en Google Developer Console) y una cuenta de servicio con la dirección de correo electrónico [email protected] que pertenecer a ella

Sé cómo usar esta cuenta de servicio para crear un calendario y manipular sus entradas mediante programación: uso la biblioteca de cliente de API de Google (versión de Java, con credenciales de cuenta de servicio) para invocar la API de calendario de Google dentro de mi aplicación Google App Engine y lo hace solo eso. Sin embargo, cualquiera de estos calendarios creados parece ser propiedad exclusiva de la cuenta de servicio, no de mi cuenta de Google englobing. Concluyo esto de las siguientes observaciones:

  • Cuando veo el calendario de mi cuenta de Google en la interfaz de usuario de Google Calendar , ninguno de los calendarios creados por programación se muestra en My calendars .
  • Cuando intento acceder a dicho calendario emitiendo Other calendars | Add a friend´s calendar y con la dirección de correo electrónico de la cuenta de servicio, puedo enviar la solicitud, pero nunca se responde (probablemente porque la dirección de correo electrónico de la cuenta de servicio no es una dirección de correo electrónico "real" ).
  • Cuando estoy creando calendarios mediante programación, no configuro CalendarListEntry#hidden , por lo que se debería aplicar el valor predeterminado false .

Entonces, mi pregunta es: ¿Cómo puedo acceder a los calendarios y las entradas de calendario que se crearon mediante programación con la API de Google Calendar (y un cliente Java en mi caso) en la interfaz de usuario web normal de Google Calendar? Por ejemplo, ¿puede la cuenta de servicio compartir sus calendarios con su cuenta de Google propietaria, o puedo manipular directamente los calendarios de la cuenta de Google con sus credenciales de cuenta de servicio en la interfaz de usuario?

Me doy cuenta de que hay algunas preguntas anteriores sobre el mismo tema, pero hasta ahora no me han ayudado a resolver el misterio.


De acuerdo con la documentación (obsoleta), debe llamar a .setServiceAccountUser("[email protected]") y el evento aparecerá en el calendario de ese usuario.

https://developers.google.com/identity/protocols/OAuth2ServiceAccount#authorizingrequests

Delegado de autoridad en todo el dominio
Si ha delegado el acceso en todo el dominio a la cuenta de servicio y desea hacerse pasar por una cuenta de usuario, especifique la dirección de correo electrónico de la cuenta de usuario con el método setServiceAccountUser de la fábrica de GoogleCredential. Por ejemplo:

GoogleCredential credential = new GoogleCredential.Builder() .setTransport(httpTransport) .setJsonFactory(JSON_FACTORY) .setServiceAccountId(emailAddress) .setServiceAccountPrivateKeyFromP12File(new File("MyProject.p12")) .setServiceAccountScopes(Collections.singleton(SQLAdminScopes.SQLSERVICE_ADMIN)) .setServiceAccountUser("[email protected]") .build();

Tiene que ser una cuenta de servicio para un dominio GSuite, y debe habilitar la Delegación de todo el dominio GSuite.


Deberá compartir el calendario creado por la cuenta de servicio mediante programación. Los calendarios son propiedad de la cuenta de servicio.

Lo que intentaste:

  • los calendarios no aparecen en su cuenta porque no tiene derecho a acceder a ellos, aunque sea el administrador de la aplicación.
  • al ingresar la dirección de correo electrónico de la cuenta de servicio no aparece el calendario en la interfaz de usuario porque la dirección de correo electrónico de la cuenta de servicio no es la dirección de correo electrónico del calendario. Una cuenta de servicio podría crear múltiples calendarios.

Comparta el calendario mediante programación con su cuenta, registre el ID único del calendario y luego ingréselo en la interfaz de usuario.


Pensé que tenías que crear el calendario con un parámetro PRN (que prácticamente falsifica la dirección de tu cuenta de Google existente en la identidad del propietario del calendario)

el uso del parámetro prn le permitirá utilizar la autenticación de la cuenta de servicio para (por ejemplo) agregar eventos en su nombre (dirección de Google).

Si encuentra una discusión usando el parámetro prn