Autentícate como usuario final

En este artículo, se explica cómo acceder a las API de Google Cloud en nombre de un usuario final. Para obtener información general sobre la autenticación en las API de Google Cloud, consulta Descripción general de la autenticación.

Flujo de autenticación

Cuando una aplicación necesita acceder a las API de Google Cloud en nombre de un usuario final, la aplicación inicia un flujo de consentimiento de OAuth. Una vez que el usuario completa el flujo, la aplicación recibe las credenciales del usuario. Con las credenciales, la aplicación puede llamar a las API de Google Cloud en nombre del usuario.

Este proceso es un protocolo que se denomina OAuth 2.0.

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

Consulta OAuth 2.0 para obtener más información sobre el tema.

Especifica permisos de OAuth

Si te autenticas como usuario final, debes especificar los permisos de OAuth de manera explícita. Estos permisos limitan las acciones que puede realizar la aplicación en nombre del usuario final. Por ejemplo, estas acciones pueden incluir la lectura de archivos de Cloud Storage o la administración de proyectos de Google Cloud.

Consulta la página específica de la API si quieres conocer los permisos 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 del proyecto, asegúrate de que el usuario tenga acceso a esos recursos. Para hacerlo, configura una función en la administración de identidades y accesos (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 IAM, pero también puedes crear funciones personalizadas. Consulta Comprende las funciones y Crea y administra funciones personalizadas para obtener más información.

Ejemplo de autenticación de un usuario final

A fin de 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 del selector de proyectos de Google Cloud Console, selecciona o crea un proyecto de Google Cloud.

    Ir a la página del selector de proyectos

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

    Descubre cómo puedes habilitar la facturación

  4. Habilita la API 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 del 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.

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 a 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 pueden usarse para acceder a los recursos de BigQuery del usuario, ya que la muestra solicitó el permiso de BigQuery.

En otro caso de uso, te recomendamos otorgar funciones de IAM para definir el nivel de acceso de un usuario.

Próximos pasos