透過使用者帳戶驗證安裝的應用程式

本指南說明當您的應用程式已安裝在使用者電腦上時,如何透過使用者帳戶進行驗證,以便存取 Google BigQuery API。

您可以利用使用者憑證來確保應用程式只能存取使用者可用的 BigQuery 資料表。使用者憑證只能對使用者的 Cloud Platform 專案執行查詢,而無法對應用程式的專案執行查詢,意即會向使用者收取查詢而非應用程式的費用。

事前準備

  1. 建立新的 Google Cloud Platform 專案來代表已安裝的應用程式。
  2. 安裝 BigQuery 用戶端程式庫
  3. 安裝額外的程式庫。

    Python

    安裝 Google Auth 的 oauthlib 整合
    pip install --upgrade google-auth-oauthlib

設定用戶端憑證

  1. 前往 Cloud Platform 主控台的 API 憑證頁面
  2. 填寫 OAuth 同意畫面中的必填欄位。
  3. 憑證頁面中,按一下 [Create credentials] (建立憑證) 按鈕。

    選擇 [OAuth 用戶端 ID]

  4. 將應用程式類型設為 [其他],然後按一下 [建立]
  5. 點選 [下載 JSON] 按鈕下載憑證。

    下載 JSON

    將憑證儲存到 client_secrets.json。這個檔案必須與您的應用程式一起發佈。

驗證及呼叫 API

  1. 使用用戶端憑證執行 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. 使用驗證過的憑證連結至 BigQuery API。

    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']))

當您執行程式碼範例時,該程式碼會開啟瀏覽器,要求存取與專案相關的用戶端密碼。所產生的憑證可用於存取使用者的 BigQuery 資源,因為這個範例要求的是 BigQuery 範圍

後續步驟

  1. 瞭解其他驗證應用程式以存取 BigQuery API 的方式
  2. 瞭解所有 Google Cloud Platform API 的使用者憑證驗證作業
本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁