替换默认身份验证方法

本文档介绍了如何替换 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. 使用模拟的服务帐号 构建器 创建凭据:

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