

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Configurar autenticação
<a name="configure-auth"></a>

 O AWS SDK para Go permite configurar o serviço de comportamento de autenticação. Na maioria dos casos, a configuração padrão será suficiente, mas a configuração da autenticação personalizada permite definir um comportamento adicional, como trabalhar com recursos de serviço de pré-lançamento. 

## Definições
<a name="definitions"></a>

 Esta seção fornece uma descrição geral dos componentes da autenticação no AWS SDK para Go. 

### AuthScheme
<a name="authscheme"></a>

 Um [AuthScheme](https://pkg.go.dev/github.com/aws/smithy-go/transport/http#AuthScheme) é a interface que define o fluxo de trabalho por meio do qual o SDK recupera a identidade do chamador e a anexa a uma solicitação de operação. 

 Um esquema de autenticação usa os seguintes componentes, descritos em detalhes abaixo: 
+  Um ID exclusivo que identifica o esquema 
+  Um resolvedor de identidade, que retorna uma identidade de chamador usada no processo de assinatura (por exemplo, suas credenciais da AWS) 
+  Um signatário, que executa a injeção real da identidade do chamador na solicitação de transporte da operação (por exemplo, o cabeçalho HTTP `Authorization`) 

 Cada opção de cliente de serviço inclui um campo `AuthSchemes` que, por padrão, é preenchido com a lista de esquemas de autenticação compatíveis com esse serviço. 

### AuthSchemeResolver
<a name="authschemeresolver"></a>

 Cada opção de cliente de serviço inclui um campo `AuthSchemeResolver`. Essa interface, definida por serviço, é a API chamada pelo SDK para determinar as possíveis opções de autenticação para cada operação. 

**Importante**  
 O resolvedor do esquema de autenticação NÃO determina qual esquema de autenticação deve ser usado. Ele retorna uma lista de esquemas que *podem* ser usados (“opções”). O esquema final é selecionado por meio de um algoritmo fixo descrito [aqui](#auth-scheme-resolution-workflow). 

### Opção
<a name="option"></a>

 Retornada de uma chamada para `ResolverAuthSchemes`, uma [Opção](https://pkg.go.dev/github.com/aws/smithy-go/auth#Option) representa uma possível opção de autenticação. 

 Uma opção consiste em três conjuntos de informações: 
+  Um ID representando o possível esquema 
+  Um conjunto opaco de propriedades a serem fornecidas ao resolvedor de identidade do esquema 
+  Um conjunto opaco de propriedades a serem fornecidas ao signatário do esquema 

#### Uma nota sobre propriedades
<a name="a-note-on-properties"></a>

 Em 99% dos casos de uso, os chamadores não precisam se preocupar com as propriedades opacas de assinatura e resolução de identidade. O SDK extrai as propriedades necessárias para cada esquema e as passa para as interfaces fortemente tipadas expostas no SDK. Por exemplo, o resolvedor de autenticação padrão para serviços codifica a opção do SigV4 para ter propriedades de signatário de nome e região de assinatura, cujos valores são passados à implementação [v4.HTTPSigner](https://pkg.go.dev/github.com/aws/smithy-go/auth#Option) configurada do cliente quando o SigV4 é selecionado. 

### Identidade
<a name="identity"></a>

 Uma [identidade](https://pkg.go.dev/github.com/aws/smithy-go/auth#Identity) é uma representação abstrata de quem é o chamador do SDK. 

 O tipo mais comum de identidade usado no SDK é um conjunto de `aws.Credentials`. Na maioria dos casos de uso, o chamador não precisa se preocupar com `Identity` como uma abstração e pode trabalhar diretamente com os tipos concretos. 

**nota**  
 Para preservar a compatibilidade com versões anteriores e evitar confusão na API, o tipo de identidade `aws.Credentials` específico do AWS SDK não satisfaz diretamente a interface `Identity`. Esse mapeamento é feito internamente. 

### IdentityResolver
<a name="identityresolver"></a>

 [IdentityResolver](https://pkg.go.dev/github.com/aws/smithy-go/auth#IdentityResolver) é a interface por meio da qual uma `Identity` é recuperada. 

 Existem versões concretas de `IdentityResolver` no SDK em formato fortemente tipado (por exemplo, [aws.CredentialsProvider](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/aws#CredentialsProvider)). O SDK gerencia esse mapeamento internamente. 

 O chamador só precisa implementar diretamente a interface `IdentityResolver` ao definir um esquema de autenticação externo. 

### Signer
<a name="signer"></a>

 [Signatário](https://pkg.go.dev/github.com/aws/smithy-go/transport/http#Signer) é a interface por meio da qual uma solicitação é complementada com o chamador recuperado `Identity`. 

 Existem versões concretas de `Signer` no SDK em formato fortemente tipado (por exemplo, [v4.HTTPSigner](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/aws/signer/v4#HTTPSigner)). O SDK gerencia esse mapeamento internamente. 

 O chamador só precisa implementar diretamente a interface `Signer` ao definir um esquema de autenticação externo. 

### AuthResolverParameters
<a name="authresolverparameters"></a>

 Cada serviço usa um conjunto específico de entradas que são passadas para sua função de resolução, definida em cada pacote de serviços como `AuthResolverParameters`. 

 Os parâmetros básicos do resolvedor são os seguintes: 


|  nome  |  type  |  description  | 
| --- | --- | --- | 
|  Operation  |  string  |  O nome da operação que está sendo invocada.  | 
|  Region  |  string  |  A região da AWS do cliente. Presente somente para serviços que usam o SigV4[A].  | 

 Se você estiver implementando seu próprio resolvedor, nunca será necessário construir sua própria instância com seus parâmetros. O SDK fornece esses valores por solicitação e os transmite para sua implementação. 

## Fluxo de trabalho de resolução do esquema de autenticação
<a name="auth-scheme-resolution-workflow"></a>

 Quando você chama uma operação de serviço da AWS por meio do SDK, a seguinte sequência de ações ocorre após a serialização da solicitação: 

1.  O SDK chama a API `AuthSchemeResolver.ResolveAuthSchemes()` do cliente, fornecendo os parâmetros de entrada conforme necessário, para obter uma lista de [Opções](https://pkg.go.dev/github.com/aws/smithy-go/auth#Option) possíveis para a operação. 

1.  O SDK repete essa lista e seleciona o primeiro esquema que satisfaz as condições a seguir. 
   +  Um esquema com ID correspondente está presente na própria lista `AuthSchemes` do cliente 
   +  O resolvedor de identidade do esquema existe (não é `nil`) nas Opções do cliente (verificado por meio do método `GetIdentityResolver` do esquema, o mapeamento para os tipos concretos de resolvedor de identidade descritos acima é gerenciado internamente) (1) 

1.  Supondo que um esquema viável tenha sido selecionado, o SDK invoca sua API `GetIdentityResolver()` para recuperar a identidade do chamador. Por exemplo, o esquema de autenticação do SigV4 integrado será mapeado internamente para o provedor de `Credentials` do cliente. 

1.  O SDK chama o resolvedor de identidade `GetIdentity()` (por exemplo, `aws.CredentialProvider.Retrieve()` para o SigV4). 

1.  O SDK chama o `ResolveEndpoint()` do resolvedor do endpoint para encontrar o endpoint da solicitação. O endpoint pode incluir metadados adicionais que influenciam o processo de assinatura (por exemplo, nome de assinatura exclusivo do S3 Object Lambda). 

1.  O SDK chama a API `Signer()` do esquema de autenticação para recuperar o signatário e usa a API `SignRequest()` para assinar a solicitação com a identidade do chamador recuperada anteriormente. 

 (1) Se o SDK encontrar a opção anônima (ID `smithy.api#noAuth`) na lista, ela será selecionada automaticamente, pois não há um resolvedor de identidade correspondente. 

## `AuthScheme`s com suporte nativo
<a name="natively-supported-authschemes"></a>

 Os seguintes esquemas de autenticação têm suporte nativo do AWS SDK para Go. 


|  Name  |  ID do esquema  |  Resolvedor de identidade  |  Signer  |  Observações  | 
| --- | --- | --- | --- | --- | 
|  [SigV4 da4](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html)  |  aws.auth\$1sigv4  |  [aws.CredentialsProvider](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/aws#Credentials)  |  [v4.HTTPSigner](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/aws/signer/v4#Signer)  |  O padrão atual para a maioria das operações de serviço da AWS.  | 
|  SigV4A  |  aws.auth\$1sigv4a  |  aws.CredentialsProvider  |  n/a  |  O uso do SigV4A é limitado no momento, a implementação do signatário é interna. Veja este [anúncio](https://github.com/aws/aws-sdk-go-v2/discussions/2812) de um novo módulo opcional aws-http-auth que expõe APIs de uso geral para assinar solicitações HTTP.  | 
|  SigV4Express  |  com.amazonaws.s3\$1sigv4express  |  [s3.ExpressCredentialsProvider](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/service/s3#ExpressCredentialsProvider)  |  v4.HTTPSigner  |  Usado para [Express One Zone](https://aws.amazon.com/s3/storage-classes/express-one-zone/).  | 
|  Portador de HTTP  |  smithy.api\$1httpBearerAuth  |  [smithybearer.TokenProvider](https://pkg.go.dev/github.com/aws/smithy-go/auth/bearer#TokenProvider)  |  [smithybearer.Signer](https://pkg.go.dev/github.com/aws/smithy-go/auth/bearer#Signer)  |  Usado pelo [CodeCatalyst](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/service/codecatalyst).  | 
|  Anônimo  |  smithy.api\$1noAuth  |  n/a  |  n/a  |  Sem autenticação: nenhuma identidade é necessária e a solicitação não está assinada ou autenticada.  | 

### Configuração de identidade
<a name="identity-configuration"></a>

 No AWS SDK para Go, os componentes de identidade de um esquema de autenticação são configurados em `Options` do cliente do SDK. O SDK seleciona e usa automaticamente os valores desses componentes para o esquema selecionado quando uma operação é chamada. 

**nota**  
 Por motivos de compatibilidade com versões anteriores, o SDK permite implicitamente o uso do esquema de autenticação anônima caso nenhum resolvedor de identidade esteja configurado. Isso pode ser feito manualmente configurando todos os resolvedores de identidade em `Options` do cliente como `nil` (o resolvedor de identidade do SigV4 também pode ser definido como `aws.AnonymousCredentials{}`). 

### Configuração do signatário
<a name="signer-configuration"></a>

 No AWS SDK para Go, os componentes de signatário de um esquema de autenticação são configurados em `Options` do cliente do SDK. O SDK seleciona e usa automaticamente os valores desses componentes para o esquema selecionado quando uma operação é chamada. Nenhuma configuração adicional é necessária. 

#### Esquema de autenticação personalizado
<a name="custom-auth-scheme"></a>

 Para definir um esquema de autenticação personalizado e configurá-lo para uso, o chamador deve fazer o seguinte: 

1.  Definir uma implementação do [AuthScheme](https://pkg.go.dev/github.com/aws/smithy-go/transport/http#AuthScheme) 

1.  Registrar o esquema na lista `AuthSchemes` do cliente do SDK 

1.  Instrumentar o `AuthSchemeResolver` do cliente do SDK para retornar uma `Option` de autenticação com o ID do esquema, quando aplicável 

**Atenção**  
 Os serviços a seguir têm um comportamento de autenticação exclusivo ou personalizado. Recomendamos que você delegue à implementação padrão e encapsule adequadamente se precisar de um comportamento de autenticação personalizado:   


|  Serviço  |  Observações  | 
| --- | --- | 
|  S3  |  Uso condicional do SigV4A e SigV4Express dependendo da entrada da operação.  | 
|  EventBridge  |  Uso condicional do SigV4a dependendo da entrada da operação.  | 
|  Cognito  |  Algumas operações são somente anônimas.  | 
|  SSO  |  Algumas operações são somente anônimas.  | 
|  STS  |  Algumas operações são somente anônimas.  | 