Como autenticar aplicativos instalados com uma conta de usuário

Este guia explica como fazer uma autenticação usando contas de usuário para acessar a Google BigQuery API quando o aplicativo estiver instalado nas máquinas dos usuários.

Para garantir que o aplicativo acesse somente as tabelas do BigQuery disponíveis para o usuário final, pode ser usada uma credencial de usuário. Essa credencial pode executar consultas apenas no projeto do Cloud Platform do usuário final, e não no projeto do aplicativo. Isso significa que o usuário é cobrado por consultas, e não pelo aplicativo.

Antes de começar

  1. Crie um novo projeto do Google Cloud Platform que represente o aplicativo instalado.
  2. Instale as bibliotecas de cliente do BigQuery.
  3. Instale outras bibliotecas.

    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 de credenciais de APIs (em inglês) no Console do Cloud Platform.
  2. Preencha os campos necessários na tela de consentimento do OAuth.
  3. Na página Credenciais (em inglês), clique no botão Criar credenciais.

    Selecione o ID do cliente OAuth.

  4. Selecione Outro como o tipo de aplicativo e, em seguida, 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 aplicativo.

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ê executar o código de exemplo, ele iniciará um navegador e solicitará o acesso ao projeto associado às chaves secretas do cliente. As credenciais resultantes podem então ser usadas para acessar os recursos do BigQuery do usuário, porque o exemplo solicitou o escopo do BigQuery.

Próximas etapas

  1. Saiba mais sobre outras formas de autenticar o aplicativo para acessar a BigQuery API.
  2. Saiba mais sobre autenticação com credenciais de usuário final para todas as APIs do Google Cloud Platform.
Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Precisa de ajuda? Acesse nossa página de suporte.