Como autenticar apps instalados com uma conta de usuário

Este guia explica como se autenticar usando contas de usuário para acessar a API BigQuery quando seu aplicativo é instalado nas máquinas dos usuários.

Para garantir que o aplicativo acesse apenas as tabelas do BigQuery que estão disponíveis para o usuário final, faça a autenticação usando uma credencial de usuário. Essa credencial pode executar consultas apenas no projeto do Google Cloud do usuário final, e não no projeto do aplicativo. Isso faz com que o usuário, e não o aplicativo, seja cobrado pelas consultas.

Antes de começar

  1. Crie um projeto do Google Cloud para representar seu aplicativo instalado.
  2. Instale as bibliotecas de cliente do BigQuery.
  3. Instale as bibliotecas necessárias.

    Python

    Instale a integração oauthlib para o Google Auth.
    pip install --upgrade google-auth-oauthlib

Como configurar as credenciais do cliente

Use o botão a seguir para selecionar um projeto e criar as credenciais necessárias.

Receber credenciais

Como criar credenciais manualmente

  1. Acesse a página Credenciais da API no Console do Google Cloud.
  2. Preencha os campos necessários na tela de consentimento do OAuth.
  3. Na página Credenciais, clique no botão Criar credenciais.

    Selecione o ID do cliente OAuth.

  4. Selecione Outro como tipo de aplicativo e clique em Criar.
  5. Faça o download das credenciais clicando no botão Fazer o download do JSON.

    Fazer o download do JSON.

    Salve o arquivo de credenciais em client_secrets.json. Esse arquivo precisa ser distribuído com seu app.

Como autenticar e chamar a API

  1. Use as credenciais do cliente para executar o fluxo do 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. Use as credenciais autenticadas para se conectar à API 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']))

Quando você executa o código de amostra, ele inicia um navegador que solicita acesso ao projeto associado às chaves secretas do cliente. É possível usar as credenciais resultantes para acessar os recursos do BigQuery do usuário, já que a amostra solicitou o escopo do BigQuery.

Próximas etapas

  1. Saiba mais sobre autenticação com credenciais de usuário final para todas as APIs do Google Cloud.
  2. Saiba mais sobre autenticação com credenciais de usuário final para todas as APIs do Google Cloud.