

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.

# Punto de conexión del emisor del token
<a name="token-endpoint"></a>

El [punto final del token OAuth ](https://www.rfc-editor.org/rfc/rfc6749#section-3.2) 2.0 `/oauth2/token` emite tokens web JSON (JWTs) a las aplicaciones que desean completar los flujos de concesión de códigos de autorización y credenciales de clientes. Estos tokens son el resultado final de la autenticación con un grupo de usuarios. Contienen información sobre el usuario (token de ID), su nivel de acceso (token de acceso) y su derecho a conservar la sesión en la que ha iniciado sesión (token de actualización). Las bibliotecas de relaciones de confianza de OpenID Connect (OIDC) administran las solicitudes y las cargas útiles de respuesta desde este punto de conexión. Los tokens proporcionan una prueba de autenticación verificable, información de perfil y un mecanismo de acceso a los sistemas de backend.

El servidor de autorización de su grupo de usuarios OAuth 2.0 emite tokens web JSON (JWTs) desde el punto de enlace del token a los siguientes tipos de sesiones:

1. Usuarios que han completado una solicitud de concesión de código de autorización. Al canjear correctamente un código, se obtienen tokens de ID, acceso y actualización.

1. Machine-to-machine Sesiones (M2M) que han completado una concesión de credenciales de cliente. Una autorización correcta con el secreto del cliente devuelve un token de acceso.

1. Usuarios que han iniciado sesión anteriormente y han recibido tokens de actualización. La autenticación de token de actualización devuelve tokens de acceso e ID nuevos.
**nota**  
Los usuarios que inicien sesión con una concesión de código de autorización en el inicio de sesión administrado o mediante federación siempre pueden actualizar los tokens desde el punto de conexión del token. Los usuarios que inician sesión con las operaciones de API `InitiateAuth` y `AdminInitiateAuth` pueden actualizar los tokens con el punto de conexión del token cuando los [dispositivos recordados](amazon-cognito-user-pools-device-tracking.md) *no* estén activos en el grupo de usuarios. Si la funcionalidad de dispositivos recordados está activa, actualice los tokens con la [operación de actualización de token de la API o el SDK que corresponda](amazon-cognito-user-pools-using-the-refresh-token.md#using-the-refresh-token-api) para su cliente de aplicación.

El punto de conexión del token pasa a estar disponible públicamente cuando agrega un dominio a su grupo de usuarios. Acepta solicitudes HTTP POST. Para proteger la aplicación, utilice la PKCE en los eventos de inicio de sesión con código de autorización. PKCE verifica que el usuario que pasa un código de autorización es el mismo que se autenticó. Para obtener más información sobre la PKCE, consulte [IETF RFC 7636](https://datatracker.ietf.org/doc/html/rfc7636).

Puedes obtener más información sobre el grupo de usuarios de los clientes de la aplicación y sus tipos de concesión, sus secretos, los ámbitos permitidos y el cliente en. IDs [Ajustes específicos de una aplicación en los clientes de aplicación](user-pool-settings-client-apps.md) Puede obtener más información sobre la autorización de M2M, las concesiones de credenciales de cliente y la autorización con ámbitos de token de acceso en [Ámbitos, M2M y servidores de recursos](cognito-user-pools-define-resource-servers.md).

Para recuperar información sobre un usuario a partir de su token de acceso, páselo a su [El punto de conexión userInfo](userinfo-endpoint.md) o a una solicitud de API [https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetUser.html](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetUser.html). El token de acceso debe contener los ámbitos adecuados para estas solicitudes.

## Formateado de una solicitud POST en el punto de conexión de token
<a name="post-token"></a>

El punto de enlace `/oauth2/token` solo admite `HTTPS POST`. Este punto de conexión no es interactivo para el usuario. Gestione las solicitudes de token con una [biblioteca OpenID Connect (OIDC)](https://openid.net/developers/certified-openid-connect-implementations/) en su aplicación.

El punto de conexión de token admite la autenticación `client_secret_basic` y `client_secret_post`. Para obtener más información sobre la especificación OIDC, consulte [Client Authentication](https://openid.net/specs/openid-connect-core-1_0.html#ClientAuthentication). Para obtener más información sobre el punto de conexión de token de la especificación OpenID Connect, consulte [Punto de conexión de token](http://openid.net/specs/openid-connect-core-1_0.html#TokenEndpoint).

### Parámetros de la solicitud en el encabezado
<a name="post-token-request-parameters"></a>

Puede pasar los siguientes parámetros en el encabezado de su solicitud al punto de conexión del token.

**`Authorization`**  
Si se le emitió un secreto al cliente, debe pasar su `client_id` y `client_secret` en el encabezado de la autorización a través de la autorización HTTP `client_secret_basic`. También puede incluir el `client_id` y `client_secret` en el cuerpo de la solicitud como autorización `client_secret_post`.  
La cadena de encabezado de autorización es [Basic](https://en.wikipedia.org/wiki/Basic_access_authentication#Client_side) `Base64Encode(client_id:client_secret)`. El ejemplo siguiente es un encabezado de autorización para el cliente de aplicación `djc98u3jiedmi283eu928` con el secreto del cliente `abcdef01234567890`, en el que se utiliza una versión codificada en Base64 de la cadena `djc98u3jiedmi283eu928:abcdef01234567890`:  

```
Authorization: Basic ZGpjOTh1M2ppZWRtaTI4M2V1OTI4OmFiY2RlZjAxMjM0NTY3ODkw
```

**`Content-Type`**  
Establezca el valor del parámetro en `'application/x-www-form-urlencoded'`.

### Parámetros de la solicitud en el cuerpo
<a name="post-token-request-parameters-in-body"></a>

A continuación, encontrará algunos parámetros que puede solicitar en formato `x-www-form-urlencoded` en el cuerpo de la solicitud al punto de conexión del token.

**`grant_type`**  
*Obligatorio*.  
El tipo de concesión OIDC que desea solicitar.  
Debe ser `authorization_code`, `refresh_token` o `client_credentials`. Puede solicitar un token de acceso a un ámbito personalizado desde el punto de conexión del token en las siguientes condiciones:  
+ Ha habilitado el ámbito solicitado en la configuración del cliente de aplicación.
+ Ha configurado el cliente de aplicación con un secreto de cliente.
+ Habilita la concesión de credenciales de cliente en el cliente de aplicación.
El punto de conexión del token devuelve un token actualizado solo cuando el `grant_type` es `authorization_code`.

**`client_id`**  
*Opcional. No es obligatorio cuando proporciona el ID de cliente de aplicación en el encabezado `Authorization`.*  
El ID de un cliente de aplicaciones de su grupo de usuarios. Especifique el mismo cliente de aplicación que ha autenticado a su usuario.  
Debe proporcionar este parámetro si el cliente es público y no tiene un secreto o tiene `client_secret` en la autorización `client_secret_post`.

**`client_secret`**  
*Opcional. No es obligatorio cuando proporciona el secreto del cliente en el encabezado de la `Authorization` y cuando el cliente de aplicación no tiene ningún secreto.*  
El secreto del cliente de aplicación, si este lo tiene, para la autorización `client_secret_post`.

**`scope`**  
*Opcional.*  
Puede ser una combinación de cualquier ámbito asociado con el cliente de su aplicación. Amazon Cognito ignora los ámbitos de la solicitud que no están permitidos para el cliente de aplicación solicitado. Si no proporciona este parámetro de solicitud, el servidor de autorización devuelve una reclamación `scope` de token de acceso con todos los ámbitos de autorización que haya habilitado en la configuración del cliente de aplicación. Puede solicitar cualquiera de los ámbitos permitidos para el cliente de aplicación solicitado: los ámbitos estándar, los ámbitos personalizados de los servidores de recursos y el ámbito de autoservicio del usuario `aws.cognito.signin.user.admin`.

**`redirect_uri`**  
*Opcional. No es obligatorio para la concesión de credenciales de clientes.*  
Debe ser la misma `redirect_uri` que el que se utilizó para obtener `authorization_code` en `/oauth2/authorize`.  
Debe proporcionar este parámetro si `grant_type` es `authorization_code`.

**`refresh_token`**  
*Opcional. Se usa solo cuando el usuario ya tiene un token de actualización y desea obtener un nuevo identificador y un token de acceso.*  
Para generar nuevos tokens de acceso e identificación para la sesión de un usuario, establezca el valor de `refresh_token` en un token de actualización válido emitido por el cliente de aplicación solicitado.  
Devuelve un nuevo token de actualización con un nuevo ID y un nuevo token de acceso cuando la [rotación del token de actualización](amazon-cognito-user-pools-using-the-refresh-token.md#using-the-refresh-token-rotation) está activa; de lo contrario, solo devuelve los tokens de ID y acceso. Si el token de acceso original estaba [vinculado a un recurso de API](cognito-user-pools-define-resource-servers.md#cognito-user-pools-resource-binding), el nuevo token de acceso mantiene la URL de la API solicitada en la reclamación `aud`.

**`code`**  
*Opcional. Solo es obligatorio en las concesiones de códigos de autorización.*  
El código de autorización de una concesión de código de autorización. Debe proporcionar este parámetro si la solicitud de autorización incluye un `grant_type` de `authorization_code`.

**`aws_client_metadata`**  
*Opcional.*  
Información que deseas transferir a los flujos de autorización [Desencadenador de Lambda anterior a la generación del token](user-pool-lambda-pre-token-generation.md) internos [machine-to-machine (M2M)](cognito-user-pools-define-resource-servers.md). Su aplicación puede recopilar información contextual sobre la sesión y pasarla a este parámetro. Cuando pasa `aws_client_metadata` en formato JSON codificado en URL, Amazon Cognito lo incluye en el evento de entrada de la función de Lambda de activación. La versión previa al evento de activación del token o la versión de activación global de Lambda deben estar configuradas para la versión tres o posterior. Si bien Amazon Cognito acepta solicitudes a este punto de conexión en los flujos M2M de códigos de autorización y credenciales de cliente, su grupo de usuarios solo pasa `aws_client_metadata` al desencadenador Antes de la generación del token desde las solicitudes de credenciales del cliente.

**`code_verifier`**  
Opcional. Solo es obligatorio si proporcionó los parámetros `code_challenge_method` y `code_challenge` en su solicitud de autorización inicial.  
El verificador de código generado a partir del cual su solicitud calculó el `code_challenge` en una solicitud de concesión de código de autorización con [PKCE](using-pkce-in-authorization-code.md).

## Intercambio de un código de autorización para los tokens
<a name="post-token-positive-exchanging-authorization-code-for-tokens"></a>

La siguiente solicitud genera tokens de ID, acceso y actualización correctamente después de la autenticación con una concesión de código de autorización. La solicitud transmite el secreto del cliente en formato `client_secret_basic` en el encabezado de `Authorization`.

```
POST https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/token&
Content-Type='application/x-www-form-urlencoded'&
Authorization=Basic ZGpjOTh1M2ppZWRtaTI4M2V1OTI4OmFiY2RlZjAxMjM0NTY3ODkw

grant_type=authorization_code&
client_id=1example23456789&
code=AUTHORIZATION_CODE&
redirect_uri=com.myclientapp://myclient/redirect
```

La respuesta envía nuevos tokens de ID, acceso y actualización para el usuario, con metadatos adicionales.

```
HTTP/1.1 200 OK
Content-Type: application/json

{
    "access_token": "eyJra1example",
    "id_token": "eyJra2example",
    "refresh_token": "eyJj3example",
    "token_type": "Bearer",
    "expires_in": 3600
}
```

## Credenciales de cliente con autorización básica
<a name="exchanging-client-credentials-for-an-access-token-in-request-body"></a>

La siguiente solicitud de una aplicación M2M solicita la concesión de credenciales de cliente. Como las credenciales de cliente requieren un secreto de cliente, la solicitud se autoriza con un encabezado de `Authorization` derivado del ID y el secreto del cliente de aplicación. La solicitud da como resultado un token de acceso con los dos ámbitos solicitados. La solicitud también incluye metadatos del cliente que proporcionan información sobre la dirección IP y un token emitido al usuario en cuyo nombre se otorga la concesión. Amazon Cognito transfiere los metadatos del cliente al desencadenador de Lambda Antes de la generación del token.

```
POST https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/token >
Content-Type='application/x-www-form-urlencoded'&
Authorization=Basic ZGpjOTh1M2ppZWRtaTI4M2V1OTI4OmFiY2RlZjAxMjM0NTY3ODkw

grant_type=client_credentials&
client_id=1example23456789&
scope=resourceServerIdentifier1%2Fscope1%20resourceServerIdentifier2%2Fscope2&
&aws_client_metadata=%7B%22onBehalfOfToken%22%3A%22eyJra789ghiEXAMPLE%22,%20%22ClientIpAddress%22%3A%22192.0.2.252%22%7D
```

Amazon Cognito transfiere los metadatos del cliente al desencadenador de Lambda Antes de la generación del token.

```
{
    version: '3',
    triggerSource: 'TokenGeneration_ClientCredentials',
    region: 'us-east-1',
    userPoolId: 'us-east-1_EXAMPLE',
    userName: 'ClientCredentials',
    callerContext: {
        awsSdkVersion: 'aws-sdk-unknown-unknown',
        clientId: '1example23456789'
    },
    request: {
        userAttributes: {},
        groupConfiguration: null,
        scopes: [
           'resourceServerIdentifier1/scope1',
           'resourceServerIdentifier2/scope2'
        ],
        clientMetadata: {
            'onBehalfOfToken': 'eyJra789ghiEXAMPLE',
            'ClientIpAddress': '192.0.2.252'
        }
    },
    response: { claimsAndScopeOverrideDetails: null }
}
```

La respuesta devuelve un token de acceso. Las credenciales de los clientes se conceden para la autorización machine-to-machine (M2M) y solo devuelven los tokens de acceso.

```
HTTP/1.1 200 OK
Content-Type: application/json
{
    "access_token": "eyJra1example",
    "token_type": "Bearer",
    "expires_in": 3600
}
```

## Credenciales de cliente con autorización en el cuerpo POST
<a name="post-token-positive-exchanging-client-credentials-for-an-access-token-in-request-body"></a>

La siguiente solicitud de concesión de credenciales de cliente incluye el parámetro `client_secret` en el cuerpo de la solicitud y no incluye un encabezado de `Authorization`. Esta solicitud usa la sintaxis de autorización `client_secret_post`. La solicitud da como resultado un token de acceso con el ámbito solicitado. La solicitud también incluye metadatos del cliente que proporcionan información sobre la dirección IP y un token emitido al usuario en cuyo nombre se otorga la concesión. Amazon Cognito transfiere los metadatos del cliente al desencadenador de Lambda Antes de la generación del token.

```
POST /oauth2/token HTTP/1.1
Content-Type: application/x-www-form-urlencoded
X-Amz-Target: AWSCognitoIdentityProviderService.Client credentials request
User-Agent: USER_AGENT
Accept: /
Accept-Encoding: gzip, deflate, br
Content-Length: 177
Referer: http://auth.example.com/oauth2/token
Host: auth.example.com
Connection: keep-alive

grant_type=client_credentials&
client_id=1example23456789&
scope=my_resource_server_identifier%2Fmy_custom_scope&
client_secret=9example87654321&
aws_client_metadata=%7B%22onBehalfOfToken%22%3A%22eyJra789ghiEXAMPLE%22,%20%22ClientIpAddress%22%3A%22192.0.2.252%22%7D
```

Amazon Cognito transfiere los metadatos del cliente al desencadenador de Lambda Antes de la generación del token.

```
{
    version: '3',
    triggerSource: 'TokenGeneration_ClientCredentials',
    region: 'us-east-1',
    userPoolId: 'us-east-1_EXAMPLE',
    userName: 'ClientCredentials',
    callerContext: {
        awsSdkVersion: 'aws-sdk-unknown-unknown',
        clientId: '1example23456789'
    },
    request: {
        userAttributes: {},
        groupConfiguration: null,
        scopes: [
           'resourceServerIdentifier1/my_custom_scope'
        ],
        clientMetadata: {
            'onBehalfOfToken': 'eyJra789ghiEXAMPLE',
            'ClientIpAddress': '192.0.2.252'
        }
    },
    response: { claimsAndScopeOverrideDetails: null }
}
```

La respuesta devuelve un token de acceso. Las credenciales de los clientes se conceden para la autorización machine-to-machine (M2M) y solo devuelven los tokens de acceso.

```
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Date: Tue, 05 Dec 2023 16:11:11 GMT
x-amz-cognito-request-id: 829f4fe2-a1ee-476e-b834-5cd85c03373b

{
    "access_token": "eyJra12345EXAMPLE",
    "expires_in": 3600,
    "token_type": "Bearer"
}
```

## Concesión de código de autorización con PKCE
<a name="post-token-positive-exchanging-authorization-code-grant-with-pkce-for-tokens"></a>

El siguiente ejemplo de solicitud realiza una solicitud de autorización que incluye los parámetros `code_challenge_method` y `code_challenge` en una solicitud de concesión de código de autorización con [PKCE](using-pkce-in-authorization-code.md).

```
POST https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/token
Content-Type='application/x-www-form-urlencoded'&
Authorization=Basic ZGpjOTh1M2ppZWRtaTI4M2V1OTI4OmFiY2RlZjAxMjM0NTY3ODkw

grant_type=authorization_code&
client_id=1example23456789&
code=AUTHORIZATION_CODE&
code_verifier=CODE_VERIFIER&
redirect_uri=com.myclientapp://myclient/redirect
```

La respuesta devuelve tokens de ID, acceso y actualización desde la verificación correcta de PKCE realizada por la aplicación.

```
HTTP/1.1 200 OK
Content-Type: application/json

{
    "access_token": "eyJra1example",
    "id_token": "eyJra2example",
    "refresh_token": "eyJj3example",
    "token_type": "Bearer",
    "expires_in": 3600
}
```

## Actualización de tokens sin rotación de tokens de actualización
<a name="post-token-positive-exchanging-a-refresh-token-for-tokens"></a>

El siguiente ejemplo de solicitudes proporciona un token de actualización a un cliente de aplicación donde la [rotación del token de actualización](amazon-cognito-user-pools-using-the-refresh-token.md#using-the-refresh-token-rotation) está inactiva. Como el cliente de aplicación tiene un secreto de cliente, la solicitud proporciona un encabezado de `Authorization`.

```
POST https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/token >
Content-Type='application/x-www-form-urlencoded'&
Authorization=Basic ZGpjOTh1M2ppZWRtaTI4M2V1OTI4OmFiY2RlZjAxMjM0NTY3ODkw

grant_type=refresh_token&
client_id=1example23456789&
refresh_token=eyJj3example
```

La respuesta devuelve nuevos tokens de acceso e ID.

```
HTTP/1.1 200 OK
Content-Type: application/json

{
    "access_token": "eyJra1example",
    "id_token": "eyJra2example",
    "token_type": "Bearer",
    "expires_in": 3600
}
```

## Actualización de tokens con rotación de tokens de actualización
<a name="post-token-positive-refresh-token-rotation"></a>

El siguiente ejemplo de solicitudes proporciona un token de actualización a un cliente de aplicación donde la [rotación del token de actualización](amazon-cognito-user-pools-using-the-refresh-token.md#using-the-refresh-token-rotation) está activa. Como el cliente de aplicación tiene un secreto de cliente, la solicitud proporciona un encabezado de `Authorization`.

```
POST https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/token >
Content-Type='application/x-www-form-urlencoded'&
Authorization=Basic ZGpjOTh1M2ppZWRtaTI4M2V1OTI4OmFiY2RlZjAxMjM0NTY3ODkw

grant_type=refresh_token&
client_id=1example23456789&
refresh_token=eyJj3example
```

La respuesta devuelve nuevos tokens de acceso, ID y actualización.

```
HTTP/1.1 200 OK
Content-Type: application/json

{
    "access_token": "eyJra1example",
    "id_token": "eyJra2example",
    "refresh_token": "eyJj4example",
    "token_type": "Bearer",
    "expires_in": 3600
}
```

## Ejemplos de respuestas negativas
<a name="post-token-negative"></a>

Las solicitudes con un formato incorrecto generan errores en el punto de conexión del token. A continuación, encontrará un mapa general del cuerpo de la respuesta cuando las solicitudes de token generan un error.

```
HTTP/1.1 400 Bad Request
Content-Type: application/json;charset=UTF-8

{
"error":"invalid_request|invalid_client|invalid_grant|unauthorized_client|unsupported_grant_type"
}
```

**`invalid_request`**  
Falta un parámetro necesario en la solicitud, la solicitud incluye un valor de parámetro no admitido (distinto de `unsupported_grant_type`) o la solicitud tiene un formato incorrecto. Por ejemplo, `grant_type` es `refresh_token` pero `refresh_token` no está incluido. 

**`invalid_client`**  
Error de autenticación del cliente. Por ejemplo, cuando el cliente incluye `client_id` y `client_secret` en el encabezado de la autorización, pero no existe un cliente con esos `client_id` y `client_secret`. 

**`invalid_grant`**  
El token de actualización se ha revocado.   
El código de autorización ya se ha utilizado o no existe.   
El cliente de la aplicación no tiene acceso de lectura a todos los [atributos](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-attributes.html) en el ámbito solicitado. Por ejemplo, su aplicación solicita el ámbito `email` y su cliente de aplicación puede leer el atributo `email`, pero no `email_verified`.

**`unauthorized_client`**  
El cliente no tiene permiso para el flujo de concesión de códigos o para la actualización de tokens. 

**`unsupported_grant_type`**  
Se devuelve si `grant_type` es distinto de `authorization_code`, `refresh_token` o `client_credentials`. 