

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Configuración de la autenticación
<a name="configure-auth"></a>

 AWS SDK para Go ofrece la posibilidad de configurar el servicio de comportamiento de autenticación. En la mayoría de los casos, la configuración predeterminada será suficiente, pero la configuración de autenticación personalizada permite un comportamiento adicional, como trabajar con características del servicio previas al lanzamiento. 

## Definiciones
<a name="definitions"></a>

 En esta sección se proporciona una descripción detallada de los componentes de autenticación de AWS SDK para Go. 

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

 [AuthScheme](https://pkg.go.dev/github.com/aws/smithy-go/transport/http#AuthScheme) es la interfaz que define el flujo de trabajo a través del cual el SDK recupera la identidad del intermediario y la asocia a una solicitud de operación. 

 Un esquema de autenticación utiliza los componentes siguientes, que se describen en detalle más adelante: 
+  Un ID único que identifica el esquema 
+  Un solucionador de identidades, que devuelve la identidad del intermediario utilizada en el proceso de firma (por ejemplo, sus credenciales de AWS) 
+  Un firmante, que es el que realmente inyecta la identidad del intermediario en la solicitud de transporte de la operación (por ejemplo, el encabezado HTTP `Authorization`) 

 Cada opción de cliente de servicio incluye un campo `AuthSchemes` que, de forma predeterminada, se rellena con la lista de esquemas de autenticación compatibles con ese servicio. 

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

 Cada opción de cliente de servicio incluye un campo `AuthSchemeResolver`. Esta interfaz, definida por servicio, es la API a la que llama el SDK para determinar las opciones de autenticación posibles para cada operación. 

**importante**  
 El solucionador de esquemas de autenticación NO dicta qué esquema de autenticación se usa. Devuelve una lista de esquemas que se *pueden* usar (“opciones”); el esquema final se selecciona a través de un algoritmo fijo que se describe [aquí](#auth-scheme-resolution-workflow). 

### Opción
<a name="option"></a>

 Un valor [Option](https://pkg.go.dev/github.com/aws/smithy-go/auth#Option), devuelto de una llamada a `ResolverAuthSchemes`, representa una posible opción de autenticación. 

 Una opción consta de tres conjuntos de información: 
+  Un identificador que representa el posible esquema 
+  Un conjunto opaco de propiedades que se proporcionará al solucionador de identidades del esquema 
+  Un conjunto opaco de propiedades que se proporcionará al firmante del esquema 

#### Nota sobre las propiedades
<a name="a-note-on-properties"></a>

 En el 99 % de los casos de uso, los intermediarios no tienen por qué preocuparse por las propiedades opacas para la resolución de identidades y la firma. El SDK extraerá las propiedades necesarias para cada esquema y las pasará a las interfaces con establecimiento inflexible de tipos expuestas en el SDK. Por ejemplo, el solucionador de autenticación predeterminado para servicios codifica la opción SigV4 de modo que tenga propiedades del firmante para la región y el nombre de la firma, cuyos valores se pasan a la implementación de [v4.HTTPSigner](https://pkg.go.dev/github.com/aws/smithy-go/auth#Option) configurada del cliente al seleccionarse SigV4. 

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

 [Identity](https://pkg.go.dev/github.com/aws/smithy-go/auth#Identity) es una representación abstracta de quién es el intermediario del SDK. 

 El tipo de identidad más común que se utiliza en el SDK es un conjunto de `aws.Credentials`. En la mayoría de los casos de uso, el intermediario no tiene por qué preocuparse de `Identity` como abstracción y puede trabajar directamente con los tipos concretos. 

**nota**  
 Para conservar la compatibilidad con versiones anteriores y evitar confusiones en relación con la API, el tipo de identidad `aws.Credentials` específico del SDK de AWS no cumple directamente con la interfaz `Identity`. Esta asignación se gestiona de forma interna. 

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

 [IdentityResolver](https://pkg.go.dev/github.com/aws/smithy-go/auth#IdentityResolver) es la interfaz a través de la cual se recupera un valor `Identity`. 

 Existen versiones concretas de `IdentityResolver` en el SDK con establecimiento inflexible de tipos (por ejemplo, [aws.CredentialsProvider](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/aws#CredentialsProvider)). El SDK gestiona esta asignación de forma interna. 

 Un intermediario solo tendrá que implementar directamente la interfaz `IdentityResolver` al definir un esquema de autenticación externo. 

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

 [Signer](https://pkg.go.dev/github.com/aws/smithy-go/transport/http#Signer) es la interfaz a través de la cual se complementa una solicitud con el valor `Identity` del intermediario recuperado. 

 Existen versiones concretas de `Signer` en el SDK con establecimiento inflexible de tipos (por ejemplo, [v4.HTTPSigner](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/aws/signer/v4#HTTPSigner)). El SDK gestiona esta asignación de forma interna. 

 Un intermediario solo tendrá que implementar directamente la interfaz `Signer` al definir un esquema de autenticación externo. 

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

 Cada servicio toma un conjunto específico de entradas que se pasan a su función de resolución, definida en cada paquete de servicios como `AuthResolverParameters`. 

 Los parámetros base del solucionador son los siguientes: 


|  nombre  |  tipo  |  description  | 
| --- | --- | --- | 
|  Operation  |  string  |  El nombre de la operación que se invoca.  | 
|  Region  |  string  |  La región de AWS del cliente. Solo está presente para los servicios que utilizan SigV4[A].  | 

 Si implementa su propio solucionador, no debería tener que crear una instancia propia de sus parámetros en ningún caso. El SDK obtendrá estos valores por solicitud y los pasará a su implementación. 

## Flujo de trabajo de resolución de esquemas de autenticación
<a name="auth-scheme-resolution-workflow"></a>

 Cuando llama a una operación de servicio de AWS a través del SDK, la siguiente secuencia de acciones se produce una vez serializada la solicitud: 

1.  El SDK llama a la API `AuthSchemeResolver.ResolveAuthSchemes()` del cliente y obtiene los parámetros de entrada según sea necesario, a fin de conseguir una lista de posibles valores [Option](https://pkg.go.dev/github.com/aws/smithy-go/auth#Option) para la operación. 

1.  El SDK recorre en iteración esa lista y selecciona el primer esquema que cumple con las siguientes condiciones: 
   +  En la propia lista `AuthSchemes` del cliente hay un esquema con un ID coincidente. 
   +  El solucionador de identidades del esquema existe (no es `nil`) en las opciones del cliente (si se comprueba mediante el método `GetIdentityResolver` del esquema, la asignación a los tipos de solucionador de identidades concretos descritos anteriormente se gestiona de forma interna). (1) 

1.  Suponiendo que se haya seleccionado un esquema viable, el SDK invoca su API `GetIdentityResolver()` para recuperar la identidad del intermediario. Por ejemplo, el esquema de autenticación SigV4 integrado se asignará internamente al proveedor de `Credentials` del cliente de forma interna. 

1.  El SDK llama a `GetIdentity()` del solucionador de identidades (por ejemplo, `aws.CredentialProvider.Retrieve()` para SigV4). 

1.  El SDK llama a `ResolveEndpoint()` del solucionador de puntos de conexión para encontrar el punto de conexión de la solicitud. El punto de conexión puede incluir metadatos adicionales que influyan en el proceso de firma (por ejemplo, un nombre de firma único para S3 Object Lambda). 

1.  El SDK llama a la API `Signer()` del esquema de autenticación para recuperar su firmante y usa su API `SignRequest()` para firmar la solicitud con la identidad del intermediario recuperada anteriormente. 

 (1) Si el SDK encuentra la opción anónima (ID `smithy.api#noAuth`) en la lista, se selecciona de forma automática, ya que no existe un solucionador de identidades correspondiente. 

## `AuthScheme` compatibles de forma nativa
<a name="natively-supported-authschemes"></a>

 Los esquemas de autenticación siguientes son compatibles de forma nativa con AWS SDK para Go. 


|  Nombre  |  ID de esquema  |  Solucionador de identidades  |  Signer  |  Notas  | 
| --- | --- | --- | --- | --- | 
|  [SigV4](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)  |  El valor predeterminado actual de la mayoría de las operaciones de servicio de AWS.  | 
|  SigV4A  |  aws.auth\$1sigv4a  |  aws.CredentialsProvider  |  n/a  |  El uso de SigV4A es limitado en este momento, la implementación del firmante es interna. Consulte este [anuncio](https://github.com/aws/aws-sdk-go-v2/discussions/2812) para ver un nuevo módulo de inclusión aws-http-auth que expone las API de uso general para firmar solicitudes HTTP.  | 
|  SigV4Express  |  com.amazonaws.s3\$1sigv4express  |  [s3.ExpressCredentialsProvider](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/service/s3#ExpressCredentialsProvider)  |  v4.HTTPSigner  |  Se utiliza para [Express One Zone](https://aws.amazon.com/s3/storage-classes/express-one-zone/).  | 
|  HTTP Bearer  |  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)  |  Utilizado por [codecatalyst](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/service/codecatalyst).  | 
|  Anonymous  |  smithy.api\$1noAuth  |  n/a  |  n/a  |  Sin autenticación: no se requiere identidad y la solicitud no se firma ni se autentica.  | 

### Configuración de identidades
<a name="identity-configuration"></a>

 En AWS SDK para Go, los componentes de identidad de un esquema de autenticación se configuran en `Options` del cliente del SDK. El SDK recogerá y utilizará de forma automática los valores de estos componentes para el esquema que seleccione cuando se llame a una operación. 

**nota**  
 Por motivos de compatibilidad con versiones anteriores, el SDK permite de forma implícita el uso del esquema de autenticación anónimo si no se ha configurado ningún solucionador de identidades. Esto se puede lograr de forma manual mediante el establecimiento de todos los solucionadores de identidades del elemento `Options` de un cliente en `nil` (el solucionador de identidades sigv4 también se puede establecer en `aws.AnonymousCredentials{}`). 

### Configuración del firmante
<a name="signer-configuration"></a>

 En AWS SDK para Go, los componentes del firmante correspondientes a un esquema de autenticación se configuran en `Options` en el cliente del SDK. El SDK recogerá y utilizará de forma automática los valores de estos componentes para el esquema que seleccione cuando se llame a una operación. No es necesaria ninguna configuración adicional. 

#### Esquema de autenticación personalizado
<a name="custom-auth-scheme"></a>

 Para definir un esquema de autenticación personalizado y configurarlo para su uso, el intermediario debe hacer lo siguiente: 

1.  Definir una implementación [AuthScheme](https://pkg.go.dev/github.com/aws/smithy-go/transport/http#AuthScheme) 

1.  Registrar el esquema en la lista `AuthSchemes` del cliente del SDK 

1.  Instrumentar el `AuthSchemeResolver` del cliente del SDK para que devuelva un valor `Option` de autenticación con el ID del esquema, cuando proceda. 

**aviso**  
 Los servicios siguientes tienen un comportamiento de autenticación único o personalizado. Recomendamos que delegue en la implementación predeterminada y la encapsule en consecuencia si necesita un comportamiento de autenticación personalizado:   


|  Servicio  |  Notas  | 
| --- | --- | 
|  S3  |  Uso condicional de SigV4A y SigV4Express en función de la entrada de la operación.  | 
|  EventBridge  |  Uso condicional de SigV4A en función de la entrada de la operación.  | 
|  Cognito  |  Algunas operaciones son únicamente anónimas.  | 
|  SSO  |  Algunas operaciones son únicamente anónimas.  | 
|  STS  |  Algunas operaciones son únicamente anónimas.  | 