Autenticar como usuario final

En la mayoría de las situaciones recomendamos que uses una cuenta de servicio para la autenticación en una API de Google Cloud Platform (GCP). Pero en algunas situaciones, es mejor 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, debido a que la API de Cloud Resource Manager puede crear y administrar proyectos que pertenecen a un usuario específico, tendrías que autenticarte como un 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 se conoce como OAuth 2.0.

Flujo de OAuth 2.0
Tu aplicación
Consentimiento del usuario
Datos del usuario

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

Especificar los alcances de la API

Si usas una cuenta de servicio para autenticarte en una API de GCP, la plataforma autenticará automáticamente la cuenta de servicio con acceso completo a la API. Si te autenticas como usuario final, tendrás que especificar los alcances de OAuth de forma manual. Estos alcances limitan las acciones que puede realizar la aplicación en nombre del usuario final. Estas acciones pueden incluir, por ejemplo, la lectura de archivos de Cloud Storage o la administración de proyectos de GCP.

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

Otorgar y limitar 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 Google Cloud Identity and Access Management (Cloud IAM) dentro de GCP.

Puede que quieras limitar 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.

Puedes crear funciones personalizadas, pero cada servicio tiene un conjunto de funciones de Cloud IAM. Consulta comprender las funciones y 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 repetir el proceso con cualquier API de GCP que tenga una biblioteca cliente.

Configurar tu proyecto

  1. Sign in to your Google Account.

    If you don't already have one, sign up for a new account.

  2. Select or create a GCP project.

    Go to the Project selector page

  3. Comprueba que la facturación esté habilitada en tu proyecto.

    Descubre cómo puedes habilitar la facturación

  4. Habilita las BigQuery API necesarias.

    Habilita las 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

Crear las credenciales del cliente

Crea las credenciales del cliente en Google Cloud Platform Console.

  1. Ve a la página API y servicios → Credenciales en GCP Console.

  2. Llena los campos obligatorios en la pantalla de consentimiento de OAuth.

  3. Haz clic en el botón Crear credenciales, luego selecciona el ID de cliente de OAuth.

  4. Selecciona Otro y haz clic en el botón Crear.

  5. Haz clic en el botón Descargar JSON para obtener las credenciales.

    Botón Descargar JSON

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

Autenticar y llamar 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, tal vez quieras agregar funciones de IAM para definir el nivel de acceso de un usuario.

Pasos siguientes

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...