Substituir o método de autenticação padrão

Neste documento, descrevemos como substituir a autenticação padrão usada pelo Rust. O Rust autentica automaticamente suas solicitações para serviços Google Cloud , mas talvez seja necessário substituir suas credenciais padrão.

Pré-requisitos

Este guia usa a API Cloud Natural Language. Para instalar essa API, siga o guia de início rápido do serviço, que mostra como ativar um serviço.

Para instruções completas de configuração das bibliotecas Rust, consulte Começar a usar o Rust.

Dependências

Declare as dependências no arquivo Cargo.toml:

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

As credenciais padrão

A maneira recomendada de autenticar aplicativos em Google Cloud é usar o Application Default Credentials. Sem nenhuma configuração, as bibliotecas de cliente usam esse tipo de credencial por padrão. Consulte Como funciona o Application Default Credentials para saber como configurar esse padrão sem fazer mudanças no código do aplicativo.

  1. Adicione algumas declarações de uso para simplificar o restante do exemplo:

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

  2. Inicialize o cliente usando os padrões:

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

  3. Use o cliente normalmente:

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

Substituir as credenciais padrão: chaves de API

As chaves de API são strings de texto que concedem acesso a alguns serviços do Google Cloud . O uso de chaves de API pode simplificar o desenvolvimento, já que elas exigem menos configuração do que outros métodos de autenticação. Há alguns riscos associados às chaves de API. Recomendamos que você leia Práticas recomendadas para gerenciar chaves de API se planeja usá-las.

  1. Escreva uma função que receba a string da chave de API como um parâmetro de entrada:

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

  2. Adicione algumas declarações de uso para simplificar o restante do exemplo:

    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. Use o Builder de chaves de API para criar as credenciais:

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

  4. Inicialize o cliente usando o objeto credentials:

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

  5. E use esse cliente normalmente:

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

Substituir as credenciais padrão: representação da conta de serviço

Com a representação de conta de serviço, é possível fazer chamadas de API em nome de uma conta de serviço. Usar a representação de uma conta de serviço discute essa forma de autenticação em detalhes.

Ao usar a representação de uma conta de serviço, você começa com um principal autenticado (sua Conta do Google ou uma conta de serviço) e solicita credenciais de curta duração para uma conta de serviço que tenha a autorização exigida pelo seu caso de uso.

É mais seguro do que baixar uma chave de conta de serviço para a conta de serviço de destino, já que não é necessário manter as credenciais no sistema de arquivos ou mesmo na memória.

  1. Escreva o exemplo em uma função que receba o identificador da conta de serviço como um parâmetro de entrada. Pode ser o e-mail da conta de serviço ou o identificador numérico exclusivo atribuído pelo 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. Adicione algumas declarações de uso para simplificar o restante do exemplo:

    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. Use o Builder da conta de serviço representada para criar as credenciais:

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

  4. Inicialize o cliente usando o objeto credentials:

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

  5. E use esse cliente normalmente:

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

Mais informações

Saiba mais sobre outros métodos de autenticação nas bibliotecas de cliente Rust: