替换默认身份验证方法

本文档介绍了如何替换 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 声明,以简化示例的其余部分:

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

  2. 使用默认值初始化客户端:

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

  3. 照常使用此客户端: <

    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. 将示例写入一个函数中,该函数接收服务账号标识符作为输入参数。可以是服务账号电子邮件地址,也可以是 Google 为服务账号分配的唯一数字标识符。

    /// # 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. 使用模拟的服务账号 Builder 创建凭据:

    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 客户端库中的其他身份验证方法: