覆寫預設驗證方法

本文說明如何覆寫 Rust 使用的預設驗證。Rust 會自動驗證對 Google Cloud 服務的要求,但您有時可能需要覆寫預設憑證。

必要條件

本指南使用 Cloud Natural Language API。如要安裝這項 API,請按照服務快速入門導覽課程的說明啟用服務。

如需 Rust 程式庫的完整設定操作說明,請參閱「開始使用 Rust」。

依附元件

您必須在 Cargo.toml 檔案中宣告依附元件:

cargo add google-cloud-language-v2 google-cloud-auth

預設憑證

建議您使用應用程式預設憑證驗證 Google Cloud 中的應用程式,用戶端程式庫預設會使用這類憑證,不需任何設定。請參閱「應用程式預設憑證的運作方式」,瞭解如何在應用程式中設定這項預設值,而不必變更任何程式碼。

  1. 新增一些用途宣告,簡化其餘範例:

    use google_cloud_language_v2::client::LanguageService;
    use google_cloud_language_v2::model::{Document, document::Type};

  2. 使用預設值初始化用戶端:

    let client = LanguageService::builder().build().await?;

  3. 照常使用這個用戶端: <0x0A

    let response = client
        .analyze_sentiment()
        .set_document(
            Document::new()
                .set_content("Hello World!")
                .set_type(Type::PlainText),
        )
        .send()
        .await?;
    println!("response={response:?}");

覆寫預設憑證:API 金鑰

API 金鑰是可授權存取部分 Google Cloud 服務的文字字串。使用 API 金鑰可簡化開發作業,因為相較於其他驗證方法,API 金鑰需要的設定較少。API 金鑰存在一些風險,因此我們建議您先閱讀管理 API 金鑰的最佳做法,再決定是否使用。

  1. 編寫函式,以 API 金鑰字串做為輸入參數:

    pub async fn sample(key: &str) -> anyhow::Result<()> {

  2. 新增一些 use 宣告,簡化其餘範例:

    use google_cloud_auth::credentials::api_key_credentials::Builder as ApiKeyCredentialsBuilder;
    use google_cloud_language_v2::client::LanguageService;
    use google_cloud_language_v2::model::{Document, document::Type};

  3. 使用 API 金鑰建構工具建立憑證:

    let credentials = ApiKeyCredentialsBuilder::new(key).build();

  4. 使用 credentials 物件初始化用戶端:

    let client = LanguageService::builder()
        .with_credentials(credentials)
        .build()
        .await?;

  5. 然後照常使用這個用戶端:

    let response = client
        .analyze_sentiment()
        .set_document(
            Document::new()
                .set_content("Hello World!")
                .set_type(Type::PlainText),
        )
        .send()
        .await?;
    println!("response={response:?}");

覆寫預設憑證:模擬服務帳戶

服務帳戶模擬功能可讓您代表服務帳戶發出 API 呼叫。「使用服務帳戶模擬功能」一文詳細說明瞭這類驗證方式。

使用服務帳戶模擬功能時,您會先從經過驗證的主體 (您的使用者帳戶或服務帳戶) 開始,然後為具備授權的服務帳戶要求短期憑證,以滿足您的用途需求。

與下載目標服務帳戶的服務帳戶金鑰相比,這種做法更安全,因為您不必將憑證存放在檔案系統,甚至不必存放在記憶體中。

  1. 在函式中編寫範例,並將服務帳戶 ID 做為輸入參數。可以是服務帳戶電子郵件地址,也可以是 Google 指派給服務帳戶的不重複數字 ID。

    /// # Parameters
    /// * `target_principal`: the email or unique id of the target service account.
    ///   For example: `my-service-account@my-project.iam.gserviceaccount.com`.
    pub async fn sample(target_principal: &str) -> anyhow::Result<()> {

  2. 新增一些 use 宣告,簡化其餘範例:

    use google_cloud_auth::credentials::Builder as AdcCredentialsBuilder;
    use google_cloud_auth::credentials::impersonated::Builder as ImpersonatedCredentialsBuilder;
    use google_cloud_language_v2::client::LanguageService;
    use google_cloud_language_v2::model::{Document, document::Type};

  3. 使用模擬的服務帳戶 建構工具 建立憑證:

    let credentials = ImpersonatedCredentialsBuilder::from_source_credentials(
        AdcCredentialsBuilder::default().build()?,
    )
    .with_target_principal(target_principal)
    .build()?;

  4. 使用 credentials 物件初始化用戶端:

    let client = LanguageService::builder()
        .with_credentials(credentials)
        .build()
        .await?;

  5. 然後照常使用這個用戶端:

    let response = client
        .analyze_sentiment()
        .set_document(
            Document::new()
                .set_content("Hello World!")
                .set_type(Type::PlainText),
        )
        .send()
        .await?;
    println!("response={response:?}");

更多資訊

瞭解 Rust 用戶端程式庫中的其他驗證方法: