為已安裝的應用程式透過使用者帳戶進行驗證

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

為確保應用程式只能存取使用者可用的 BigQuery 資料表,請藉由使用者憑證進行驗證。使用者憑證只能對使用者的 Google Cloud Platform (GCP) 專案執行查詢,而無法對應用程式的專案執行查詢。因此,系統僅會向使用者收取查詢費用,而非應用程式費用。

事前準備

  1. 建立一個代表已安裝應用程式的 GCP 專案。
  2. 安裝 BigQuery 用戶端程式庫
  3. 安裝必要的程式庫。

    Python

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

設定用戶端憑證

使用下列按鈕來選取專案並建立必要憑證。

Get Credentials (取得憑證)

手動建立憑證

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

    選擇 [OAuth client ID] (OAuth 用戶端 ID)

  4. 將應用程式類型設為 [Other] (其他),然後按一下 [Create] (建立)
  5. 點選 [Download JSON] (下載 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. 瞭解所有 GCP API 的使用者憑證驗證作業。
本頁內容對您是否有任何幫助?請提供意見:

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

這個網頁
需要協助嗎?請前往我們的支援網頁