

La versión 2 de AWS SDK para JavaScript ha llegado al final del soporte. Se recomienda que migre a [AWS SDK para JavaScript v3](https://docs.aws.amazon.com//sdk-for-javascript/v3/developer-guide/). Para ver detalles e información adicionales sobre cómo realizar la migración, consulte este [anuncio](https://aws.amazon.com/blogs//developer/announcing-end-of-support-for-aws-sdk-for-javascript-v2/).

# Configuración de las credenciales
<a name="setting-credentials"></a>

AWS utiliza credenciales para identificar quién llama a servicios y si el acceso a los recursos solicitados está permitido. 

El código JavaScript, sea cual sea su punto de ejecución, un navegador web o un servidor Node.js, debe obtener credenciales válidas para poder obtener acceso a los servicios a través de la API. Las credenciales se pueden configurar en el objeto de configuración, mediante `AWS.Config` o por servicio, por medio de la transferencia directa de las credenciales a un objeto de servicio.

Hay varias formas de configurar credenciales que difieren entre Node.js y JavaScript en navegadores web. En los temas de esta sección se describe cómo configurar credenciales en Node.js o en navegadores web. En cada caso, las opciones se presentan en el orden recomendado.

## Prácticas recomendadas para las credenciales
<a name="credentials-best-practices"></a>

Configurar correctamente las credenciales garantiza que su aplicación o script de navegador pueda obtener acceso a los servicios y los recursos necesarios y, al mismo tiempo, minimiza su exposición a problemas de seguridad que puedan repercutir en aplicaciones críticas o pongan en peligro información confidencial.

Cuando se configuran credenciales es importante aplicar siempre el principio de conceder el privilegio mínimo necesario para llevar a cabo la tarea. Es más seguro proporcionar permisos mínimos sobre sus recursos y añadir más permisos según sea necesario, en lugar de proporcionar permisos que superan el privilegio mínimo y luego tener que solucionar problemas de seguridad que puedan aparecer más tarde. Por ejemplo, a menos que necesite leer y escribir recursos individuales, como objetos en un bucket de Amazon S3 o una tabla de DynamoDB, establezca dichos permisos en solo lectura.

Para obtener más información sobre la concesión de privilegios mínimos, consulte la sección [Conceder privilegios mínimos](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege) del tema de prácticas recomendadas de la *Guía del usuario de IAM*.

**aviso**  
Aunque es posible hacerlo, le recomendamos que no codifique de forma rígida las credenciales dentro de una aplicación o un script de navegador. La codificación rígida de las credenciales conlleva un riesgo de exponer información confidencial.

Para obtener más información acerca de cómo administrar las claves de acceso, consulte [Prácticas recomendadas para administrar las claves de acceso de AWS](https://docs.aws.amazon.com/general/latest/gr/aws-access-keys-best-practices.html) en la Referencia general de AWS.

**Topics**
+ [Prácticas recomendadas para las credenciales](#credentials-best-practices)
+ [Configuración de credenciales en Node.js](setting-credentials-node.md)
+ [Configuración de credenciales en un navegador web](setting-credentials-browser.md)

# Configuración de credenciales en Node.js
<a name="setting-credentials-node"></a>

En Node.js hay varias formas de proporcionar sus credenciales al SDK. Algunas de ellas son más seguras y otras ofrecen más comodidad mientras se desarrolla una aplicación. Al obtener las credenciales en Node.js, sea especialmente cuidadoso si se basa en más de un origen como, por ejemplo, una variable de entorno y un archivo JSON que carga. Puede cambiar los permisos con los que se ejecuta su código sin darse cuenta de que se ha producido el cambio.

A continuación se muestran las formas de suministro de credenciales según su orden de recomendación:

1. Cargado desde roles de AWS Identity and Access Management (IAM) para Amazon EC2

1. Cargadas desde un archivo de credenciales compartidas (`~/.aws/credentials`).

1. Cargadas desde variables de entorno.

1. Cargadas desde un archivo JSON en el disco.

1. Otras clases de proveedores de credenciales que proporciona el SDK para JavaScript

Si hay más de un origen de credenciales disponible para el SDK, la prioridad de selección predeterminada es la siguiente:

1. Credenciales que se establecen explícitamente a través del constructor de cliente de servicio.

1. Variables de entorno

1. El archivo de credenciales compartidas.

1. Credenciales cargadas desde el proveedor de credenciales de ECS (si corresponde)

1. Credenciales que se obtienen utilizando un proceso de credenciales especificado en el archivo de configuración de AWS compartido o en el archivo de credenciales compartido. Para obtener más información, consulte [Loading Credentials en Node.js mediante un Proceso de credenciales configurado](loading-node-credentials-configured-credential-process.md).

1. Credenciales cargadas desde AWS IAM mediante el proveedor de credenciales de la instancia de Amazon EC2 (si se configura en los metadatos de instancia)

Para obtener más información, consulte [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Credentials.html](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Credentials.html) y [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/CredentialProviderChain.html](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/CredentialProviderChain.html) en la referencia de la API.

**aviso**  
Aunque es posible hacerlo, no le recomendamos codificar de forma rígida sus credenciales de AWS en la aplicación. Si las codifica de forma rígida, corre el riesgo de que su ID de clave de acceso y la clave de acceso secreta queden expuestos.

En los temas de esta sección se describe cómo cargar credenciales en Node.js.

**Topics**
+ [Carga de credenciales en Node.js desde roles de IAM para Amazon EC2](loading-node-credentials-iam.md)
+ [Carga de credenciales para una función Lambda de Node.js](loading-node-credentials-lambda.md)
+ [Carga de credenciales en Node.js desde el archivo de credenciales compartidas](loading-node-credentials-shared.md)
+ [Carga de credenciales en Node.js desde variables de entorno](loading-node-credentials-environment.md)
+ [Carga de credenciales en Node.js desde un archivo JSON](loading-node-credentials-json-file.md)
+ [Loading Credentials en Node.js mediante un Proceso de credenciales configurado](loading-node-credentials-configured-credential-process.md)

# Carga de credenciales en Node.js desde roles de IAM para Amazon EC2
<a name="loading-node-credentials-iam"></a>

Si ejecuta su aplicación de Node.js en una instancia de Amazon EC2, puede utilizar roles de IAM para Amazon EC2, para suministrar automáticamente credenciales a la instancia. Si configura la instancia para que utilice roles de IAM, el SDK selecciona automáticamente las credenciales de IAM para su aplicación, lo que elimina la necesidad de proporcionar las credenciales manualmente.

Para obtener más información sobre cómo agregar roles de IAM a una instancia de Amazon EC2, consulte [Uso de roles de IAM para instancias de Amazon EC2](https://docs.aws.amazon.com/sdkref/latest/guide/access-iam-roles-for-ec2.html) en la *Guía de referencia de las herramientas y los SDK de AWS*.

# Carga de credenciales para una función Lambda de Node.js
<a name="loading-node-credentials-lambda"></a>

Al crear una función de Lambda, tiene que crear un rol de IAM especial que tenga permiso para ejecutar la función. Este rol se denomina el *rol de ejecución*. Cuando configura una función de Lambda, tiene que especificar el rol de IAM que ha creado como el rol de ejecución correspondiente.

El rol de ejecución proporciona a la función de Lambda las credenciales que necesita para ejecutarse y para invocar otros servicios web. En consecuencia, no es necesario proporcionar credenciales al código Node.js que escribe dentro de una función de Lambda.

Para obtener más información sobre cómo crear un rol de ejecución de Lambda, consulte [Administración de permisos mediante un rol de IAM (rol de ejecución)](https://docs.aws.amazon.com/lambda/latest/dg/intro-permission-model.html#lambda-intro-execution-role) en la *Guía para desarrolladores de AWS Lambda*.

# Carga de credenciales en Node.js desde el archivo de credenciales compartidas
<a name="loading-node-credentials-shared"></a>

Puede conservar los datos de sus credenciales de AWS en un archivo compartido que utilizan los SDK y la interfaz de línea de comandos. Cuando se carga el SDK para JavaScript, busca automáticamente el archivo de credenciales compartidas, que se llama “credentials”. La ubicación del archivo de credenciales compartido depende del sistema operativo:
+ El archivo de credenciales compartidas en Linux, Unix y macOS: `~/.aws/credentials`.
+ El archivo de credenciales compartidas en Windows: `C:\Users\USER_NAME\.aws\credentials`.

Si aún no tiene un archivo de credenciales compartidas, consulte [Autenticación de SDK con AWS](getting-your-credentials.md). Después de seguir estas instrucciones, debería ver un texto similar al siguiente en el archivo de credenciales, donde *<YOUR\$1ACCESS\$1KEY\$1ID>* es el ID de clave de acceso y *<YOUR\$1SECRET\$1ACCESS\$1KEY>* es la clave de acceso secreta:

```
[default]
aws_access_key_id = <YOUR_ACCESS_KEY_ID>
aws_secret_access_key = <YOUR_SECRET_ACCESS_KEY>
```

Para ver un ejemplo de uso de este archivo, consulte [Introducción a Node.js](getting-started-nodejs.md).

El encabezado de sección `[default]` especifica un perfil predeterminado y valores asociados para las credenciales. Puede crear perfiles adicionales en el mismo archivo de configuración compartido, cada uno con su propia información de credenciales. En el ejemplo siguiente se muestra un archivo de configuración con el perfil predeterminado y dos perfiles adicionales:

```
[default] ; default profile
aws_access_key_id = <DEFAULT_ACCESS_KEY_ID>
aws_secret_access_key = <DEFAULT_SECRET_ACCESS_KEY>
    
[personal-account] ; personal account profile
aws_access_key_id = <PERSONAL_ACCESS_KEY_ID>
aws_secret_access_key = <PERSONAL_SECRET_ACCESS_KEY>
    
[work-account] ; work account profile
aws_access_key_id = <WORK_ACCESS_KEY_ID>
aws_secret_access_key = <WORK_SECRET_ACCESS_KEY>
```

De forma predeterminada, el SDK comprueba la variable de entorno `AWS_PROFILE` para determinar qué perfil se va a utilizar. Si la variable `AWS_PROFILE` no se establece en su entorno, el SDK utiliza las credenciales del perfil `[default]`. Para utilizar uno de los perfiles alternativos, configure o cambie el valor de la variable de entorno `AWS_PROFILE`. Por ejemplo, dado el archivo de configuración que se muestra más arriba, para utilizar las credenciales de la cuenta de trabajo, establezca la variable de entorno `AWS_PROFILE` en `work-account` (según corresponda para su sistema operativo).

**nota**  
Cuando configure variables de entorno, asegúrese de tomar las medidas adecuadas después (según las necesidades de su sistema operativo) para que las variables estén disponibles en el entorno de shell o de comandos.

Después de configurar la variable de entorno (si es necesario), puede ejecutar un archivo de JavaScript que utiliza el SDK, como por ejemplo, un archivo llamado `script.js`.

```
$ node script.js
```

También puede seleccionar de forma explícita el perfil que el SDK utiliza, ya sea estableciendo `process.env.AWS_PROFILE` antes de cargar el SDK o seleccionando el proveedor de credenciales tal y como se muestra en el ejemplo siguiente:

```
var credentials = new AWS.SharedIniFileCredentials({profile: 'work-account'});
AWS.config.credentials = credentials;
```

# Carga de credenciales en Node.js desde variables de entorno
<a name="loading-node-credentials-environment"></a>

El SDK detecta automáticamente las credenciales de AWS establecidas como variables en el entorno y las utiliza para sus solicitudes, lo que elimina la necesidad de administrar credenciales en su aplicación. Las variables de entorno que establece para suministrar las credenciales son:
+ `AWS_ACCESS_KEY_ID`
+ `AWS_SECRET_ACCESS_KEY`
+ `AWS_SESSION_TOKEN`

Para obtener más información sobre cómo establecer variables de entorno, consulte [Compatibilidad con variables de entorno](https://docs.aws.amazon.com/sdkref/latest/guide/environment-variables.html) en la *Guía de referencia de las herramientas y los SDK de AWS*.

# Carga de credenciales en Node.js desde un archivo JSON
<a name="loading-node-credentials-json-file"></a>

Puede cargar la configuración y las credenciales desde un documento JSON en el disco mediante `AWS.config.loadFromPath`. La ruta se especifica en relación con el directorio de trabajo actual de su proceso. Por ejemplo, para cargar credenciales desde un archivo `'config.json'` con el siguiente contenido:

```
{ "accessKeyId": <YOUR_ACCESS_KEY_ID>, "secretAccessKey": <YOUR_SECRET_ACCESS_KEY>, "region": "us-east-1" }
```

A continuación, utilice el siguiente código:

```
var AWS = require("aws-sdk");
AWS.config.loadFromPath('./config.json');
```

**nota**  
Cargar datos de configuración desde un documento JSON restablece todos los datos de configuración ya existentes. Añada datos de configuración adicionales después de usar esta técnica. La carga de credenciales desde un documento JSON no se admite en scripts de navegador.

# Loading Credentials en Node.js mediante un Proceso de credenciales configurado
<a name="loading-node-credentials-configured-credential-process"></a>

Puede obtener credenciales utilizando un método que no esté integrado en el SDK. Para ello, especifique un proceso de credenciales en el archivo de configuración de AWS compartido o en el archivo de credenciales compartido. Si la variable de entorno `AWS_SDK_LOAD_CONFIG` se establece en cualquier valor, el SDK preferirá el proceso especificado en el archivo de configuración al proceso especificado en el archivo de credenciales (si existe).

Para obtener más información sobre cómo especificar un proceso de credenciales en el archivo de configuración de AWS compartido o en el archivo de credenciales compartido, consulte la *Referencia de comandos de AWS CLI*, específicamente la información sobre la [obtención de credenciales de procesos externos](https://docs.aws.amazon.com/cli/latest/topic/config-vars.html#sourcing-credentials-from-external-processes).

Para obtener información sobre el uso de la variable de entorno `AWS_SDK_LOAD_CONFIG`, consulte [Uso de un archivo de configuración compartido](setting-region.md#setting-region-config-file) en este documento.

# Configuración de credenciales en un navegador web
<a name="setting-credentials-browser"></a>

Hay varias formas de proporcionar credenciales al SDK desde scripts de navegador. Algunas de ellas son más seguras y otras ofrecen más comodidad mientras se desarrolla un script. A continuación se muestran las formas de suministro de credenciales según su orden de recomendación:

1. Uso de Amazon Cognito Identity para autenticar a los usuarios y proporcionar credenciales

1. Uso de identidades federadas web

1. codificadas de forma rígida en el script

**aviso**  
No se recomienda codificar de forma rígida las credenciales de AWS en sus scripts. Si las codifica de forma rígida, corre el riesgo de que su ID de clave de acceso y la clave de acceso secreta queden expuestos.

**Topics**
+ [Uso de Amazon Cognito Identity para autenticar a los usuarios](loading-browser-credentials-cognito.md)
+ [Uso de identidades federadas web para autenticar usuarios](loading-browser-credentials-federated-id.md)
+ [Ejemplos de identidades federadas web](config-web-identity-examples.md)

# Uso de Amazon Cognito Identity para autenticar a los usuarios
<a name="loading-browser-credentials-cognito"></a>

La forma recomendada de obtener credenciales de AWS para los scripts del navegador es utilizar el objeto de credenciales de Amazon Cognito Identity, `AWS.CognitoIdentityCredentials`. Amazon Cognito permite la autenticación de los usuarios a través de proveedores de identidad de terceros.

Para usar Amazon Cognito Identity, primero debe crear un grupo de identidades en la consola Amazon Cognito. Un grupo de identidades representa el grupo de identidades que su aplicación proporciona a los usuarios. Las identidades que se dan a los usuarios identifican de forma inequívoca cada cuenta de usuario. Las identidades de Amazon Cognito no son credenciales. Se intercambian por credenciales utilizando la compatibilidad con las identidades web federadas en AWS Security Token Service (AWS STS).

Amazon Cognito es útil para administrar la abstracción de identidades a través de varios proveedores de identidades con el objeto `AWS.CognitoIdentityCredentials`. La identidad que se carga se intercambia por credenciales en AWS STS.

## Configuración del objeto de credenciales de Amazon Cognito Identity
<a name="browser-cognito-configuration"></a>

Si todavía no ha creado un grupo de identidades, cree uno para usarlo con los scripts de navegador en la [consola de Amazon Cognito](https://console.aws.amazon.com/cognito) antes de configurar `AWS.CognitoIdentityCredentials`. Cree y asocie roles de IAM autenticados y sin autenticar para su grupo de identidades.

La identidad de los usuarios sin autenticar no se verifica, lo que hace que este rol sea adecuado para los usuarios invitados de la aplicación o para cuando no importa si se verifica la identidad de los usuarios. Los usuarios autenticados inician sesión en la aplicación a través de un proveedor de identidades externo que verifica sus identidades. Asegúrese de asignar los permisos de los recursos de forma adecuada, para no conceder acceso a ellos a los usuarios no autenticados.

Después de configurar un grupo de identidades con proveedores de identidades asociados, puede utilizar `AWS.CognitoIdentityCredentials` para autenticar a los usuarios. Para configurar las credenciales de la aplicación para utilizar `AWS.CognitoIdentityCredentials`, establezca la propiedad `credentials` de `AWS.Config` o una configuración específica para cada servicio. El siguiente ejemplo utiliza `AWS.Config`:

```
AWS.config.credentials = new AWS.CognitoIdentityCredentials({
  IdentityPoolId: 'us-east-1:1699ebc0-7900-4099-b910-2df94f52a030',
  Logins: { // optional tokens, used for authenticated login
    'graph.facebook.com': 'FBTOKEN',
    'www.amazon.com': 'AMAZONTOKEN',
    'accounts.google.com': 'GOOGLETOKEN'
  }
});
```

La propiedad opcional `Logins` es un mapeo entre los nombres de los proveedores de identidad y los tokens de identidad de los proveedores. La forma de obtener el token del proveedor de identidad depende del proveedor que se utilice. Por ejemplo, si Facebook es uno de sus proveedores de identidad, puede utilizar la función `FB.login` del [SDK de Facebook](https://developers.facebook.com/docs/facebook-login/web) para obtener un token de proveedor de identidad:

```
FB.login(function (response) {
  if (response.authResponse) { // logged in
    AWS.config.credentials = new AWS.CognitoIdentityCredentials({
      IdentityPoolId: 'us-east-1:1699ebc0-7900-4099-b910-2df94f52a030',
      Logins: {
        'graph.facebook.com': response.authResponse.accessToken
      }
    });

    s3 = new AWS.S3; // we can now create our service object

    console.log('You are now logged in.');
  } else {
    console.log('There was a problem logging you in.');
  }
});
```

## Cambio de usuarios sin autenticar a usuarios autenticados
<a name="browser-switching-unauthenticated-users"></a>

Amazon Cognito es compatible con los usuarios autenticados y no autenticados. Los usuarios sin autenticar reciben acceso a sus recursos incluso si no han iniciado sesión con alguno de sus proveedores de identidades. Este grado de acceso es útil para mostrar contenido a usuarios antes de que inicien sesión. Cada usuario sin autenticar tiene una identidad única en Amazon Cognito, aunque no haya iniciado sesión ni se haya autenticado individualmente.

### Usuario sin autenticar inicialmente
<a name="browser-switching-initially-unauthenticated-user"></a>

Los usuarios suelen comenzar con el rol sin autenticar, para el que se establece la propiedad de credenciales de su objeto de configuración sin una propiedad `Logins`. En este caso, la configuración predeterminada podría tener el siguiente aspecto:

```
// set the default config object
var creds = new AWS.CognitoIdentityCredentials({
 IdentityPoolId: 'us-east-1:1699ebc0-7900-4099-b910-2df94f52a030'
});
AWS.config.credentials = creds;
```

### Cambie a usuario autenticado
<a name="switch-to-authenticated"></a>

Cuando un usuario sin autenticar inicia sesión en un proveedor de identidades y tiene un token, puede cambiar el usuario de no estar autenticado a estar autenticado llamando a una función personalizada que actualiza el objeto de credenciales y añade el token `Logins`:

```
// Called when an identity provider has a token for a logged in user
function userLoggedIn(providerName, token) {
  creds.params.Logins = creds.params.Logins || {};
  creds.params.Logins[providerName] = token;
                    
  // Expire credentials to refresh them on the next request
  creds.expired = true;
}
```

También puede crear un objeto `CognitoIdentityCredentials`. Si lo hace, debe restablecer las propiedades de las credenciales de los objetos de servicio existentes que ha creado. Los objetos de servicio leen en la configuración global solo al realizarse la inicialización del objeto. 

Para obtener más información acerca del objeto `CognitoIdentityCredentials`, consulte [https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/CognitoIdentityCredentials.html](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/CognitoIdentityCredentials.html) en la referencia de la API de AWS SDK para JavaScript. 

# Uso de identidades federadas web para autenticar usuarios
<a name="loading-browser-credentials-federated-id"></a>

Puede configurar directamente distintos proveedores de identidades para obtener acceso a recursos de AWS a través de la federación de identidades web. AWS actualmente admite la autenticación de usuarios mediante las identidades web federadas a través de varios proveedores de identidades:
+ [Login with Amazon](https://login.amazon.com)
+ [Inicio de sesión con Facebook](https://www.facebook.com/about/login)
+ [Inicio de sesión con Google](https://developers.google.com/identity/)

Primero debe registrar la aplicación con los proveedores compatibles con su aplicación. Luego cree un rol de IAM y configure permisos para él. El rol de IAM que cree se utilizará para conceder los permisos que haya configurado para él a través del proveedor de identidades respectivo. Por ejemplo, puede configurar un rol que permita a los usuarios que han iniciado sesión a través de Facebook tener acceso de lectura a un bucket de Amazon S3 específico que usted controla.

Una vez que tenga un rol de IAM con privilegios configurados y una aplicación registrada en los proveedores de identidades de su elección, puede configurar el SDK para obtener credenciales para el rol de IAM usando código auxiliar, tal y como se indica a continuación:

```
AWS.config.credentials = new AWS.WebIdentityCredentials({
   RoleArn: 'arn:aws:iam::<AWS_ACCOUNT_ID>/:role/<WEB_IDENTITY_ROLE_NAME>',
   ProviderId: 'graph.facebook.com|www.amazon.com', // this is null for Google
   WebIdentityToken: ACCESS_TOKEN
});
```

El valor del parámetro `ProviderId` depende del proveedor de identidades especificado. El valor del parámetro `WebIdentityToken` es el token de acceso recuperado desde un inicio de sesión correcto con el proveedor de identidades. Para obtener más información sobre cómo configurar y recuperar tokens de acceso para cada proveedor de identidades, consulte la documentación del proveedor de identidades.

## Paso 1: Registro en proveedores de identidades
<a name="config-web-identity-register"></a>

Para empezar, registre una aplicación en los proveedores de identidades que decida admitir. Se le pedirá que proporcione información que identifique su aplicación y posiblemente su autor. De este modo, se garantiza que los proveedores de identidades sepan quién está recibiendo su información de usuario. En todos los casos, el proveedor de identidades emitirá un ID de aplicación que se utilizará para configurar los roles de usuarios.

## Paso 2: Creación de un rol de IAM para un proveedor de identidades
<a name="config-web-identity-role"></a>

Después de obtener el ID de aplicación de un proveedor de identidades, vaya a la consola de IAM en [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) para crear un rol de IAM nuevo.

**Para crear un rol de IAM para proveedor de identidades**

1. Vaya a la sección **Roles** de la consola y, a continuación, seleccione **Create New Role (Crear nuevo rol)**.

1. Escriba un nombre para el nuevo rol que le ayudará a realizar un seguimiento de su uso, como por ejemplo **facebookIdentity** y luego elija **Next Step (Paso siguiente)**.

1. En **Select Role Type (Seleccionar tipo de rol)**, elija **Role for Identity Provider Access (Rol para acceso del proveedor de identidades)**.

1. Para **Grant access to web identity providers (Conceder acceso a los proveedores de identidades web)**, elija **Select (Seleccionar)**.

1. En la lista **Proveedor de identidades**, elija el proveedor de identidades que desea usar para este rol de IAM.  
![\[Selección del rol para el acceso de proveedores de identidades\]](http://docs.aws.amazon.com/es_es/sdk-for-javascript/v2/developer-guide/images/iam-provider-select.png)

1. Escriba el ID de la aplicación que ha proporcionado el proveedor de identidades en ** Application ID (ID de la aplicación)** y, a continuación, seleccione **Next Step (Paso siguiente)**.

1. Configure permisos para los recursos que desea mostrar y permita el acceso a operaciones específicas en recursos específicos. Para obtener más información sobre los permisos de IAM, consulte [Descripción general de los permisos de AWS IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_permissions.html) en la *Guía del usuario de IAM*. Revise y, si es necesario, personalice la relación de confianza del rol y, a continuación, seleccione **Next Step (Paso siguiente)**.

1. Asocie las políticas adicionales que necesita y, a continuación, seleccione **Next Step (Paso siguiente)**. Para obtener más información acerca de las políticas de IAM, consulte [Descripción general de las políticas de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html) en la *Guía del usuario de IAM*.

1. Revise el nuevo rol y, a continuación, elija **Create role (Crear rol)**.

Puede añadir más restricciones al rol como, por ejemplo, limitarlo a ID de usuario específicos. Si el rol concede permisos de escritura sobre sus recursos, asegúrese de que restringe el rol correctamente a los usuarios que tengan los privilegios adecuados; de lo contrario, cualquier usuario con una identidad de Amazon, Facebook o Google podrá modificar recursos de su aplicación.

Para obtener más información acerca de cómo usar la federación de identidades web en IAM, consulte [Acerca de identidades web federadas](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_oidc.html) en la *Guía del usuario de IAM*.

## Paso 3: Obtención de un token de acceso después de iniciar sesión
<a name="config-web-identity-obtain-token"></a>

Configure la acción de inicio de sesión para su aplicación mediante el SDK del proveedor de identidades. Puede descargar e instalar un SDK de JavaScript del proveedor de identidades que permita el inicio de sesión de usuario mediante OAuth u OpenID. Para obtener información acerca de cómo descargar y configurar el código del SDK en su aplicación, consulte la documentación del SDK para su proveedor de identidades:
+ [Login with Amazon](https://login.amazon.com/website)
+ [Inicio de sesión con Facebook](https://developers.facebook.com/docs/javascript)
+ [Inicio de sesión con Google](https://developers.google.com/identity/)

## Paso 4: Obtención de credenciales temporales
<a name="config-web-identity-get-credentials"></a>

Una vez que haya configurado su aplicación, los roles y los permisos a nivel de recursos, añada el código a la aplicación para obtener credenciales temporales. Estas credenciales se proporcionan a través de AWS Security Token Service con la identidad web federada. Los usuarios inician sesión en el proveedor de identidades, el cual devuelve un token de acceso. Configure el objeto `AWS.WebIdentityCredentials` con el ARN para el rol de IAM que ha creado para este proveedor de identidades:

```
AWS.config.credentials = new AWS.WebIdentityCredentials({
    RoleArn: 'arn:aws:iam::<AWS_ACCOUNT_ID>:role/<WEB_IDENTITY_ROLE_NAME>',
    ProviderId: 'graph.facebook.com|www.amazon.com', // Omit this for Google
    WebIdentityToken: ACCESS_TOKEN // Access token from identity provider
});
```

Los objetos de servicio que se creen posteriormente tendrán las credenciales apropiadas. Los objetos creados antes de configurar la propiedad `AWS.config.credentials` no tienen las credenciales actuales.

También puede crear `AWS.WebIdentityCredentials` antes de recuperar el token de acceso. Esto le permite crear objetos de servicio que dependen de las credenciales antes de cargar el token de acceso. Para ello, cree el objeto de credenciales sin el parámetro `WebIdentityToken`:

```
AWS.config.credentials = new AWS.WebIdentityCredentials({
  RoleArn: 'arn:aws:iam::<AWS_ACCOUNT_ID>:role/<WEB_IDENTITY_ROLE_NAME>',
  ProviderId: 'graph.facebook.com|www.amazon.com' // Omit this for Google
});

// Create a service object
var s3 = new AWS.S3;
```

A continuación, establezca `WebIdentityToken` en la devolución de llamada del SDK del proveedor de identidades que contiene el token de acceso:

```
AWS.config.credentials.params.WebIdentityToken = accessToken;
```

# Ejemplos de identidades federadas web
<a name="config-web-identity-examples"></a>

A continuación se ofrecen algunos ejemplos de uso de identidades federadas web para obtener credenciales en JavaScript de navegador. Estos ejemplos debe ejecutarse desde un esquema de host http:// o https:// para garantizar que el proveedor de identidades pueda realizar redirecciones a la aplicación. 

## Ejemplo de inicio de Login with Amazon
<a name="config-web-identity-amazon-login-example"></a>

En el código siguiente se muestra cómo utilizar Login with Amazon como proveedor de identidades. 

```
<a href="#" id="login">
  <img border="0" alt="Login with Amazon"
    src="https://images-na.ssl-images-amazon.com/images/G/01/lwa/btnLWA_gold_156x32.png"
    width="156" height="32" />
</a>
<div id="amazon-root"></div>
<script type="text/javascript">
  var s3 = null;
  var clientId = 'amzn1.application-oa2-client.1234567890abcdef'; // client ID
  var roleArn = 'arn:aws:iam::<AWS_ACCOUNT_ID>:role/<WEB_IDENTITY_ROLE_NAME>';

  window.onAmazonLoginReady = function() {
    amazon.Login.setClientId(clientId); // set client ID

    document.getElementById('login').onclick = function() {
      amazon.Login.authorize({scope: 'profile'}, function(response) {
        if (!response.error) { // logged in
          AWS.config.credentials = new AWS.WebIdentityCredentials({
            RoleArn: roleArn,
            ProviderId: 'www.amazon.com',
            WebIdentityToken: response.access_token
          });

          s3 = new AWS.S3();

          console.log('You are now logged in.');
        } else {
          console.log('There was a problem logging you in.');
        }
      });
    };
  };

  (function(d) {
    var a = d.createElement('script'); a.type = 'text/javascript';
    a.async = true; a.id = 'amazon-login-sdk';
    a.src = 'https://api-cdn.amazon.com/sdk/login1.js';
    d.getElementById('amazon-root').appendChild(a);
  })(document);
</script>
```

## Ejemplo de inicio de sesión con Facebook
<a name="config-web-identity-facebook-login-example"></a>

En el código siguiente se muestra cómo utilizar el inicio de sesión con Facebook como proveedor de identidades:

```
<button id="login">Login</button>
<div id="fb-root"></div>
<script type="text/javascript">
var s3 = null;
var appId = '1234567890'; // Facebook app ID
var roleArn = 'arn:aws:iam::<AWS_ACCOUNT_ID>:role/<WEB_IDENTITY_ROLE_NAME>';

window.fbAsyncInit = function() {
  // init the FB JS SDK
  FB.init({appId: appId});

  document.getElementById('login').onclick = function() {
    FB.login(function (response) {
      if (response.authResponse) { // logged in
        AWS.config.credentials = new AWS.WebIdentityCredentials({
          RoleArn: roleArn,
          ProviderId: 'graph.facebook.com',
          WebIdentityToken: response.authResponse.accessToken
        });

        s3 = new AWS.S3;

        console.log('You are now logged in.');
      } else {
        console.log('There was a problem logging you in.');
      }
    });
  };
};

// Load the FB JS SDK asynchronously
(function(d, s, id){
   var js, fjs = d.getElementsByTagName(s)[0];
   if (d.getElementById(id)) {return;}
   js = d.createElement(s); js.id = id;
   js.src = "//connect.facebook.net/en_US/all.js";
   fjs.parentNode.insertBefore(js, fjs);
 }(document, 'script', 'facebook-jssdk'));
</script>
```

## Ejemplo de inicio de sesión con Google\$1
<a name="config-web-identity-google-login-example"></a>

En el código siguiente se muestra cómo utilizar el inicio de sesión con Google\$1 como proveedor de identidades. El token de acceso que se utiliza para la identidad web federada de Google se almacena en `response.id_token` en lugar de almacenarse en `access_token`, como es el caso de otros proveedores de identidades. 

```
<span
  id="login"
  class="g-signin"
  data-height="short"
  data-callback="loginToGoogle"
  data-cookiepolicy="single_host_origin"
  data-requestvisibleactions="http://schemas.google.com/AddActivity"
  data-scope="https://www.googleapis.com/auth/plus.login">
</span>
<script type="text/javascript">
  var s3 = null;
  var clientID = '1234567890.apps.googleusercontent.com'; // Google client ID
  var roleArn = 'arn:aws:iam::<AWS_ACCOUNT_ID>:role/<WEB_IDENTITY_ROLE_NAME>';

  document.getElementById('login').setAttribute('data-clientid', clientID);
  function loginToGoogle(response) {
    if (!response.error) {
      AWS.config.credentials = new AWS.WebIdentityCredentials({
        RoleArn: roleArn, WebIdentityToken: response.id_token
      });

      s3 = new AWS.S3();

      console.log('You are now logged in.');
    } else {
      console.log('There was a problem logging you in.');
    }
  }

  (function() {
    var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
    po.src = 'https://apis.google.com/js/client:plusone.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
  })();
 </script>
```