es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo obtener id_token para cargar correctamente en Cloud Run?

Tengo una aplicación de Django en la que he estado trabajando. Cuando la ejecuto localmente funciona perfectamente. Sin embargo, cuando la ejecuto en un contenedor utilizando Cloud Run, obtengo el siguiente error:

“El objeto ‘Credentials’ no tiene el atributo ‘id_token'”.

Este es el código que está causando el problema (el objeto ‘payload’ es un diccionario):

def ProcessPayload(payload):
# Obtener credenciales de sesión autorizadas
credentials, _ = google.auth.default()
session = AuthorizedSession(credentials)
credentials.refresh(Request(session))
# Procesar solicitud ‘post’
headers = {‘Authorization’: f’Bearer {credentials.id_token}’}
response = requests.post(URL, json=payload, headers=headers)

En mi entorno local, la actualización de credenciales carga correctamente el ‘id_token’ correcto para el encabezado necesario, pero por alguna razón no funciona cuando el código se implementa en Cloud Run. Tengo la instancia de Cloud Run configurada para usar una cuenta de servicio, por lo que debería poder obtener credenciales de ella. ¿Cómo puedo hacer que esto funcione? He buscado en Google hasta que me duelen los dedos y no he encontrado ninguna solución viable.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema se encuentra en el atributo credentials.id_token. Parece que el objeto credentials no se está cargando con el atributo id_token al ejecutarse en Cloud Run.

    Para que esto funcione, deberá asegurarse de que el objeto credentials se esté cargando con el atributo id_token. Para ello, puede utilizar la función google.auth.default() para obtener las credenciales y, a continuación, utilizar el método credentials.refresh() para cargar el objeto credentials con el atributo id_token.

    También puede intentar utilizar el método google.oauth2.service_account.Credentials.from_service_account_file() para obtener las credenciales y luego utilizar el método credentials.refresh() para cargar el objeto credentials con el atributo id_token.

    Si sigue teniendo problemas, puede intentar utilizar la función google.auth.default() para obtener las credenciales y luego utilizar el método credentials.refresh_from_token_uri() para cargar el objeto credentials con el atributo id_token.

    ¡Espero que esto ayude!

Comments are closed.