Autentica como usuario final

En la mayoría de los casos, recomendamos usar una cuenta de servicio para la autenticación en una API de Google Cloud. En algunas situaciones, puede que desees que los usuarios se autentiquen directamente. Por ejemplo:

  • Si necesitas acceder a recursos en nombre de un usuario final de tu aplicación. Por ejemplo, si necesitas que la aplicación acceda a conjuntos de datos de Google BigQuery que pertenecen a los usuarios de la aplicación.

  • Si necesitas autenticarte como tú mismo en lugar de tu aplicación. Por ejemplo, la API de Resource Manager puede crear y administrar proyectos que pertenecen a un usuario específico, por lo que tendrías que autenticarte como usuario para crear proyectos en su nombre.

En esta guía, se analizan las credenciales de los usuarios finales. No se analiza cómo autenticar un usuario en tu aplicación. Para consultar ese caso práctico, recomendamos que visites Firebase Authentication.

Flujo de autenticación

La aplicación muestra una pantalla de consentimiento al usuario cuando esta debe acceder a los recursos en su nombre. Si el usuario acepta, la aplicación solicita las credenciales a un servidor autorizado. Las credenciales permiten que la aplicación acceda a los recursos en nombre del usuario.

Este proceso es un protocolo que denomina OAuth 2.0.

Flujo de OAuth 2.0
Tu app
Consentimiento del usuario
Datos del usuario

Consulta OAuth 2.0 para conocer más sobre el tema.

Especifica los permisos de la API

Cuando usas una cuenta de servicio para autenticarte en una API de Google Cloud, Google Cloud autentica automáticamente la cuenta de servicio con acceso total a la API. Si te autenticas como usuario final, debes especificar los permisos de OAuth de forma manual. Estos permisos limitan las acciones que puede realizar la aplicación en nombre del usuario final. Por ejemplo, estas acciones pueden incluir leer archivos de Cloud Storage o administrar proyectos de Google Cloud.

Consulta la página específica de una API si quieres conocer los alcances de OAuth disponibles. Por ejemplo, si planeas usar el método disks.get() para la API de Compute Engine, debes configurar uno de estos permisos de OAuth. Usa tu caso práctico como referencia para establecer el permiso mínimo necesario.

Otorga y limita el acceso a recursos de proyectos

Si usas credenciales de usuario final para acceder a los recursos de tu proyecto, procura que el usuario tenga acceso a esos recursos. Para hacerlo, configura una función en Cloud Identity and Access Management (Cloud IAM) dentro de Google Cloud.

Recomendamos que limites los recursos a los que puede acceder un usuario. Esto sucede especialmente si permites que el usuario acceda a los recursos de uno de tus proyectos. Configura las funciones según el privilegio mínimo que necesite el usuario.

Cada servicio tiene un conjunto de funciones de Cloud IAM, pero también puedes crear funciones personalizadas. Consulta la documentación sobre la comprensión de las funciones y cómo crear y administrar funciones personalizadas para obtener más información.

Ejemplo de autenticación de un usuario final

Para obtener las credenciales para un usuario final, completa las siguientes secciones. En los pasos que se enumeran a continuación se usa la API de BigQuery, pero puedes replicar el proceso con cualquier API de Google Cloud que tenga una biblioteca cliente.

Configura el proyecto

  1. Accede a tu Cuenta de Google.

    Si todavía no tienes una cuenta, regístrate para obtener una nueva.

  2. En la página Selector de proyectos de Cloud Console, selecciona o crea un proyecto de Cloud.

    Ir a la página Selector de proyectos

  3. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud. Obtén información sobre cómo confirmar que tienes habilitada la facturación para tu proyecto.

  4. Habilita la API de BigQuery.

    Habilita la API

  5. Instala las bibliotecas cliente de BigQuery.
  6. Si usas Python o Node.js, debes instalar una biblioteca auth adicional.

    Python

    Instala la integración con oauthlib para Google Auth.

    pip install --upgrade google-auth-oauthlib

Crea las credenciales de cliente

Crea las credenciales de cliente en Google Cloud Console.

  1. Ve a la página Pantalla de consentimiento de OAuth en Cloud Console.

  2. En la página Credenciales, selecciona el botón Crear credenciales y, luego, ID de cliente de OAuth.

  3. Selecciona Otro y, luego, el botón Crear. Selecciona el botón Aceptar después de que aparezca el cuadro de diálogo de éxito.

  4. Para descargar las credenciales, selecciona el botón Descargar JSON para el ID de cliente.

    Botón Descargar JSON

  5. Guarda el archivo de credenciales en client_secrets.json. Este se debe distribuir con la aplicación.

Autentica y llama a la API

  1. Usa las credenciales del cliente para completar el flujo de OAuth 2.0.

    Python

    from google_auth_oauthlib import flow
    
    # TODO: Uncomment the line below to set the `launch_browser` variable.
    # launch_browser = True
    #
    # The `launch_browser` boolean variable indicates if a local server is used
    # as the callback URL in the auth flow. A value of `True` is recommended,
    # but a local server does not work if accessing the application remotely,
    # such as over SSH or from a remote Jupyter notebook.
    
    appflow = flow.InstalledAppFlow.from_client_secrets_file(
        'client_secrets.json',
        scopes=['https://www.googleapis.com/auth/bigquery'])
    
    if launch_browser:
        appflow.run_local_server()
    else:
        appflow.run_console()
    
    credentials = appflow.credentials

  2. Usa las credenciales autenticadas para conectarte con la API de BigQuery.

    Python

    from google.cloud import bigquery
    
    # TODO: Uncomment the line below to set the `project` variable.
    # project = 'user-project-id'
    #
    # The `project` variable defines the project to be billed for query
    # processing. The user must have the bigquery.jobs.create permission on
    # this project to run a query. See:
    # https://cloud.google.com/bigquery/docs/access-control#permissions
    
    client = bigquery.Client(project=project, credentials=credentials)
    
    query_string = """SELECT name, SUM(number) as total
    FROM `bigquery-public-data.usa_names.usa_1910_current`
    WHERE name = 'William'
    GROUP BY name;
    """
    query_job = client.query(query_string)
    
    # Print the results.
    for row in query_job.result():  # Wait for the job to complete.
        print("{}: {}".format(row['name'], row['total']))

Si ejecutas el código de muestra, este iniciará un navegador que solicita acceso al proyecto asociado con los secretos del cliente. Luego, las credenciales que se generan se pueden usar para acceder a los recursos de BigQuery del usuario, ya que la muestra solicitó el alcance de BigQuery.

En otro caso práctico, te recomendamos otorgar funciones de Cloud IAM para definir el nivel de acceso de un usuario.

Qué sigue