

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.

# Puntos de conexión de los proveedores de identidades y de la relación de confianza
<a name="federation-endpoints"></a>

Los puntos *de enlace de federación son puntos* de enlace de grupos de usuarios que sirven para cumplir uno de los estándares de autenticación utilizados por los grupos de usuarios. Incluyen el SAML ACS URLs, los puntos finales de detección del OIDC y los puntos finales de servicio para las funciones de grupo de usuarios, tanto de proveedor de identidad como de parte de confianza. Los puntos finales de la federación inician los flujos de autenticación, reciben una prueba de autenticación y emiten tokens a los clientes IdPs. Interactúan con IdPs las aplicaciones y los administradores, pero no con los usuarios.

Los temas de página completa que aparecen después de esta página contienen detalles sobre los terminales OAuth 2.0 y OIDC que están disponibles al añadir un dominio a su grupo de usuarios. En el siguiente gráfico, se muestra una lista de todos los puntos de conexión de federación.

Algunos ejemplos de [dominios de grupos de usuarios](cognito-user-pools-assign-domain.md):

1. Dominio de prefijo: `mydomain.auth.us-east-1.amazoncognito.com`

1. Dominio personalizado: `auth.example.com`


**Puntos de conexión de federación de grupo de usuarios**  

| URL del punto de conexión | Description (Descripción) | Cómo se accede | 
| --- | --- | --- | 
| https:///oauth2/authorize Your user pool domain | Redirige un usuario al inicio de sesión administrado o a iniciar sesión con el IdP. | Se invoca en el navegador del cliente para iniciar la autenticación del usuario. Consulte [Autorizar punto de conexión](authorization-endpoint.md). | 
| https:///oauth2/token Your user pool domain | Devuelve los tokens en función de un código de autorización o de una solicitud de credenciales del cliente. | La aplicación la solicita para recuperar los tokens. Consulte [Punto de conexión de token](token-endpoint.md). | 
| Your user pool domainhttps://oAuth2/UserInfo | Devuelve los atributos del usuario en función de los ámbitos OAuth 2.0 y la identidad del usuario en un token de acceso. | La aplicación la solicita para recuperar el perfil de usuario. Consulte [El punto de conexión userInfo](userinfo-endpoint.md). | 
| https://oauth2/revoke Your user pool domain | Revoca un token de actualización y los tokens de acceso asociados. | La aplicación la solicita para revocar un token. Consulte [Revocación de puntos de conexión](revocation-endpoint.md). | 
| https://cognito-idp. Region.amazonaws.com/ /.well-known/openid-configuration your user pool ID | Un directorio de la arquitectura OIDC de su grupo de usuarios. [1](#cognito-federation-oidc-discovery-note) | La aplicación la solicita para localizar los metadatos del emisor del grupo de usuarios. | 
| https://cognito-idp. Region.amazonaws.com/ /.well-known/jwks.json your user pool ID | Claves públicas que puede usar para validar los tokens de Amazon Cognito. [2](#cognito-federation-oidc-jwks-note) | Solicitado por la aplicación para verificarlo JWTs. | 
| Your user pool domainhttps://oauth2/idpresponse | Los proveedores de identidades social deben redirigir a los usuarios a este punto de conexión con un código de autorización. Amazon Cognito canjea el código por un token cuando autentica al usuario federado. | Se redirigió desde el inicio de sesión del IdP de OIDC como URL de devolución de llamada del cliente de IdP. | 
| Your user pool domainhttps:///saml2/idpreresponse | La URL de Assertion Consumer Response (ACS) para la integración con los proveedores de identidades de SAML 2.0. | Se redirige desde el IdP SAML 2.0 como URL de ACS o punto de origen para el inicio de sesión iniciado por el IdP[3](#cognito-federation-idp-init-note). | 
| Your user pool domainhttps:///saml2/cerrar sesión | La URL de [cierre de sesión único](cognito-user-pools-saml-idp-sign-out.md#cognito-user-pools-saml-idp-sign-out.title) (SLO) para la integración con los proveedores de identidades SAML 2.0. | Se redirige desde el IdP SAML 2.0 como URL de cierre de sesión único (SLO). Solo acepta enlaces de tipo POST. | 

1 El `openid-configuration` documento puede actualizarse en cualquier momento con información adicional que permita que el terminal cumpla con la OIDC y las especificaciones. OAuth2 

2 El archivo JSON `jwks.json` se puede actualizar en cualquier momento para incluir nuevas claves públicas de firma con token.

3 Para obtener más información sobre el inicio de sesión SAML iniciado por el IdP, consulte. [Implementación del inicio de sesión de SAML iniciado por el IdP](cognito-user-pools-SAML-session-initiation.md#cognito-user-pools-SAML-session-initiation-idp-initiation)

[Para obtener más información sobre OpenID Connect y sus OAuth estándares, consulte OpenID [Connect](http://openid.net/specs/openid-connect-core-1_0.html) 1.0 y 2.0. OAuth](https://tools.ietf.org/html/rfc6749)

**Topics**
+ [El punto de conexión de redireccionamiento y autorización](authorization-endpoint.md)
+ [Punto de conexión del emisor del token](token-endpoint.md)
+ [El punto de conexión de los atributos de usuario](userinfo-endpoint.md)
+ [El punto de conexión de revocación del token](revocation-endpoint.md)
+ [El punto de conexión de aserción del IdP SAML](saml2-idpresponse-endpoint.md)

# El punto de conexión de redireccionamiento y autorización
<a name="authorization-endpoint"></a>

El punto de conexión `/oauth2/authorize` es un punto de conexión de redirección que admite dos destinos de redireccionamiento. Si incluye un parámetro `identity_provider` o `idp_identifier` en la URL, redirige al usuario de forma silenciosa a la página de inicio de sesión de ese proveedor de identidades (IdP). De lo contrario, redirige al [Punto de conexión Login](login-endpoint.md) con los mismos parámetros de URL incluidos en la solicitud. 

El punto de conexión de autorización redirige al inicio de sesión administrado o a la página de inicio de sesión de IdP. El destino de una sesión de usuario en este punto de conexión es una página web con la que su usuario debe interactuar directamente en su navegador.

Para usar el punto de conexión de autorización, invoque el navegador de su usuario en `/oauth2/authorize` con parámetros que proporcionan a su grupo de usuarios información sobre los siguientes detalles del grupo de usuarios.
+ El cliente de aplicación en el que desea iniciar sesión.
+ La URL de devolución de llamada en la que quiere terminar.
+ Los ámbitos OAuth 2.0 que desea solicitar en el token de acceso de su usuario.
+ De manera opcional, el IdP de terceros que desea usar para iniciar sesión.

También puede suministrar los parámetros `state` y `nonce` que Amazon Cognito utiliza para validar las notificaciones entrantes.

## GET `/oauth2/authorize`
<a name="get-authorize"></a>

El punto de enlace `/oauth2/authorize` solo admite `HTTPS GET`. Por lo general, la aplicación inicia esta solicitud en el navegador del usuario. Solo puede hacer solicitudes a los puntos de conexión de `/oauth2/authorize` sobre HTTPS.

Puede obtener más información sobre la definición del punto de conexión de autorización en el estándar OpenID Connect (OIDC) en [Punto de conexión de autorización](http://openid.net/specs/openid-connect-core-1_0.html#ImplicitAuthorizationEndpoint).

### Parámetros de solicitud
<a name="get-authorize-request-parameters"></a>

**`response_type`**  
Obligatorio.  
El tipo de respuesta. Debe ser `code` o `token`.   
Una solicitud exitosa con un `response_type` de `code` devuelve una concesión de código de autorización. Una concesión de código de autorización es un parámetro `code` que Amazon Cognito añade a la URL de redireccionamiento. Su aplicación puede intercambiar el código con el [Punto de conexión de token](token-endpoint.md) para tokens de acceso, ID y actualización. Como práctica recomendada de seguridad, y para recibir tokens de actualización para sus usuarios, use un código de autorización de concesión en su aplicación.  
Una solicitud exitosa con un `response_type` de `token` devuelve una concesión de código de autorización. Una concesión implícita es un identificador y un token de acceso que Amazon Cognito añade a la URL de redireccionamiento. Una concesión implícita es menos segura porque expone los tokens y la posible información de identificación a los usuarios. Puede desactivar la compatibilidad con las concesiones implícitas en la configuración del cliente de su aplicación.

**`client_id`**  
Obligatorio.  
El ID de cliente de aplicación.  
El valor de `client_id` debe ser el ID de un cliente de aplicación del grupo de usuarios en el que se realiza la solicitud. El cliente de la aplicación debe admitir el inicio de sesión de los usuarios locales de Amazon Cognito o de al menos un IdP de terceros.

**`redirect_uri`**  
Obligatorio.  
La dirección URL a la que el servidor de autenticación redirige el navegador después de que Amazon Cognito autorice al usuario.  
Un identificador uniforme de recursos (URI) de redirección debe tener los siguientes atributos:  
+ Ser un URI absoluta
+ Debe haber registrado el URI previamente en un cliente.
+ No puede incluir un componente fragmento.
Consulte [OAuth 2.0: Punto final de redirección.](https://tools.ietf.org/html/rfc6749#section-3.1.2)  
Amazon Cognito requiere que el URI de redireccionamiento use HTTPS, excepto para `http://localhost`, que puede configurar como URL de devolución de llamada para pruebas.  
Amazon Cognito también admite la devolución de llamadas a aplicaciones, como. URLs `myapp://example`

**`state`**  
Opcional, recomendado.  
Cuando su aplicación agrega un parámetro *state* a una solicitud, Amazon Cognito devuelve su valor a la aplicación cuando el punto de conexión `/oauth2/authorize` redirige al usuario.  
Agregue este valor a sus solicitudes de protección contra ataques [CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery).  
No se puede establecer el valor de un parámetro `state` a una cadena JSON codificada en URL. Para pasar una cadena que coincida con este formato en un parámetro `state`, codifique la cadena en base64 y luego descodifíquela en la aplicación.

**`identity_provider`**  
Opcional.  
Agregue este parámetro para omitir el inicio de sesión administrado y redirigir al usuario a la página de inicio de sesión del proveedor. El valor del*identity\$1provider*es el nombre del proveedor de identidad (IdP) tal como aparece en el grupo de usuarios.  
+ En el caso de los proveedores de redes sociales, puede usar los valores de *identity\$1provider* `Facebook`, `Google`, `LoginWithAmazon` y `SignInWithApple`.
+ En cuanto a los grupos de usuarios de Amazon Cognito, utilice el valor `COGNITO`.
+ Para los proveedores de identidad SAML 2.0 y OpenID Connect (OIDC) (IdPs), usa el nombre que asignaste al IdP en tu grupo de usuarios.

**`idp_identifier`**  
Opcional.  
Agregue este parámetro para redirigir a un proveedor con un nombre alternativo para el nombre *identity\$1provider*. Puede introducir los identificadores de SAML 2.0 y OIDC en el menú IdPs de **proveedores sociales y externos** de la consola de Amazon Cognito.

**`scope`**  
Opcional.  
Puede ser una combinación de cualquier ámbito reservado por el sistema o ámbitos personalizados asociados a un cliente. Los ámbitos deben estar separados por espacios. Los ámbitos reservados por el sistema son `openid`, `email`, `phone`, `profile` y `aws.cognito.signin.user.admin`. Todo ámbito utilizado debe estar asociado al cliente o se ignorará en el tiempo de ejecución.  
Si el cliente no solicita ningún ámbito, en el servidor de autenticación se utilizarán todos los ámbitos asociados al cliente.  
Solo se devuelve un token de ID si se solicita el ámbito `openid`. El token de acceso solo se puede utilizar en grupos de usuarios de Amazon Cognito si se solicita el ámbito `aws.cognito.signin.user.admin`. Los ámbitos `phone`, `email` y `profile` solo se pueden solicitar si se solicita también el ámbito `openid`. Estos ámbitos dictan las notificaciones que se incluyen en el token de ID.

**`code_challenge_method`**  
Opcional.  
El protocolo de hash que ha utilizado para generar el desafío. En el [PKCE RFC](https://tools.ietf.org/html/rfc7636), se definen dos métodos, S256 y sin formato; sin embargo, el servidor de autenticación de Amazon Cognito solo admite S256.

**`code_challenge`**  
Opcional.  
El desafío de prueba de intercambio de códigos clave (PKCE) que ha generado a partir de `code_verifier`. Para obtener más información, consulte [Uso de la PKCE en las concesiones de códigos de autorización](using-pkce-in-authorization-code.md).  
Obligatorio solo cuando se especifica un parámetro `code_challenge_method`.

**`nonce`**  
Opcional.  
Valor aleatorio que puede agregar a la solicitud. El valor nonce que proporciona se incluye en el token de ID que emite Amazon Cognito. Para protegerse de los ataques de reproducción, su aplicación puede inspeccionar la reclamación de `nonce` en el token de identificación y compararlo con el generado. Para obtener más información sobre la reclamación de `nonce`, consulte [ID token validation](https://openid.net/specs/openid-connect-core-1_0.html#IDTokenValidation) (Validación de token de ID) en el *estándar de OpenID Connect*.

**`lang`**  
Opcional.  
El idioma en el que desea mostrar las páginas interactivas para el usuario. Las páginas de inicio de sesión administrado se pueden localizar, pero las páginas de la interfaz de usuario alojada (clásicas) no. Para obtener más información, consulte [Localización de inicio de sesión administrado](cognito-user-pools-managed-login.md#managed-login-localization).

**`login_hint`**  
Opcional.  
La petición de nombre de usuario que desea pasar al servidor de autorización. Puede recopilar el nombre de usuario, la dirección de correo electrónico o el número de teléfono del usuario y permitir que el proveedor de destino rellene previamente el nombre de inicio de sesión del usuario. Cuando envía un parámetro `login_hint` y ningún parámetro `idp_identifier` ni `identity_provider` al punto de conexión `oauth2/authorize`, el inicio de sesión administrado rellena el campo del nombre de usuario con el valor de la sugerencia. También puede pasar este parámetro al [Punto de conexión Login](login-endpoint.md) y rellenar automáticamente el valor del nombre de usuario.  
Cuando su solicitud de autorización invoca una redirección a OIDC, Amazon IdPs Cognito añade un `login_hint` parámetro a la solicitud a ese autorizador externo. No puedes reenviar las sugerencias de inicio de sesión a SAML, Apple, Login With Amazon, Google o Facebook (Meta) IdPs.

**`prompt`**  
Opcional.  
Parámetro de OIDC que controla el comportamiento de autenticación de las sesiones existentes. Disponible solo en la versión de creación de marca de inicio de sesión administrado, no en la interfaz de usuario alojada clásica. Para obtener más información sobre la especificación OIDC, consulte [Solicitud de autorización](https://openid.net/specs/openid-connect-core-1_0.html#AuthRequest). Los valores `none` y `login` tienen un efecto en el comportamiento de autenticación del grupo de usuarios.  
Amazon Cognito reenvía todos los valores `prompt` excepto `none` a usted IdPs cuando los usuarios seleccionan la autenticación con proveedores externos. Esto ocurre cuando la URL a la que acceden los usuarios incluye un parámetro `identity_provider` o `idp_identifier`, o cuando el servidor de autorización los redirige al [Punto de conexión Login](login-endpoint.md) y ellos seleccionan un IdP en los botones disponibles.  
**Valores de parámetros de petición**    
`prompt=none`  
Amazon Cognito continúa la autenticación de forma silenciosa para los usuarios que tienen una sesión autenticada válida. Con esta petición, los usuarios pueden autenticarse de forma silenciosa entre diferentes clientes de aplicaciones de su grupo de usuarios. Si el usuario aún no se ha autenticado, el servidor de autorización devuelve un error `login_required`.  
`prompt=login`  
Amazon Cognito requiere que los usuarios se vuelvan a autenticar aunque tengan una sesión existente. Envíe este valor cuando desee volver a verificar la identidad del usuario. Los usuarios autenticados que tienen una sesión existente pueden volver a iniciar sesión sin invalidar esa sesión. Cuando un usuario que tiene una sesión existente vuelve a iniciar sesión, Amazon Cognito le asigna una nueva cookie de sesión. Este parámetro también se puede reenviar a su. IdPs IdPslos que aceptan este parámetro también solicitan al usuario un nuevo intento de autenticación.  
`prompt=select_account`  
Este valor no afecta al inicio de sesión local y debe enviarse en las solicitudes que redirijan a IdPs. Cuando se incluye en la solicitud de autorización, este parámetro añade `prompt=select_account` a la ruta URL del destino de redireccionamiento del IdP. Cuando IdPs admiten este parámetro, solicitan a los usuarios que seleccionen la cuenta con la que desean iniciar sesión.  
`prompt=consent`  
Este valor no afecta al inicio de sesión local y debe enviarse en las solicitudes que redirijan a IdPs. Cuando se incluye en la solicitud de autorización, este parámetro añade `prompt=consent` a la ruta URL del destino de redireccionamiento del IdP. Cuando IdPs admiten este parámetro, solicitan el consentimiento del usuario antes de volver a redirigirlo a tu grupo de usuarios. 
Al omitir el parámetro `prompt` de la solicitud, el inicio de sesión administrado sigue el comportamiento predeterminado: los usuarios deben iniciar sesión a menos que su navegador tenga una cookie de inicio de sesión administrado válida. Puede combinar varios valores para `prompt` con un delimitador de caracteres y espacios, como `prompt=login consent`.

**`resource`**  
Opcional.  
El identificador de un recurso que quiere vincular al token de acceso en la reclamación `aud`. Al incluir este parámetro, Amazon Cognito valida que el valor es una URL y establece la audiencia del token de acceso resultante en el recurso solicitado. Puede solicitar un [servidor de recursos](cognito-user-pools-define-resource-servers.md) de grupo de usuarios con un identificador en formato de URL o una URL de su elección. Los valores de este parámetro deben empezar por `https://`, `http://localhost` o un esquema de URL personalizado, como `myapp://`.  
La vinculación de recursos se define en [RFC 8707](https://www.rfc-editor.org/rfc/rfc8707.html). Para obtener más información acerca de los servidores de recursos y la vinculación de recursos, consulte [Vinculación de recursos](cognito-user-pools-define-resource-servers.md#cognito-user-pools-resource-binding).

## Ejemplo: concesión de código de autorización
<a name="sample-authorization-code-grant"></a>

A continuación mostramos un ejemplo de solicitud de concesión de código de autorización.

La solicitud siguiente inicia una sesión para recuperar un código de autorización que el usuario pasa a la aplicación en el destino de `redirect_uri`. En dicha sesión, se solicitan los ámbitos de los atributos de usuario y el acceso a las operaciones de la API de autoservicio de Amazon Cognito.

```
GET https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/authorize?
response_type=code&
client_id=1example23456789&
redirect_uri=https://www.example.com&
state=abcdefg&
scope=openid+profile+aws.cognito.signin.user.admin
```

El servidor de autenticación de Amazon Cognito redirige a la aplicación con el código y el estado de autorización. El código de autorización es válido durante cinco minutos.

```
HTTP/1.1 302 Found
Location: https://www.example.com?code=a1b2c3d4-5678-90ab-cdef-EXAMPLE11111&state=abcdefg
```

## Ejemplo: concesión de código de autorización con PKCE
<a name="sample-authorization-code-grant-with-pkce"></a>

Este ejemplo de flujo realiza una concesión de código de autorización con [PKCE](using-pkce-in-authorization-code.md#using-pkce-in-authorization-code.title).

Esta solicitud agrega un parámetro `code_challenge`. Para intercambiar un código por un token, debe incluir el parámetro `code_verifier` en la solicitud para el punto de conexión `/oauth2/token`.

```
GET https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/authorize?
response_type=code&
client_id=1example23456789&
redirect_uri=https://www.example.com&
state=abcdefg&
scope=aws.cognito.signin.user.admin&
code_challenge_method=S256&
code_challenge=a1b2c3d4...
```

El servidor de autorización devuelve la redirección a la aplicación con el estado y el código de autorización. Su aplicación procesa el código de autorización y lo cambia por tokens.

```
HTTP/1.1 302 Found
Location: https://www.example.com?code=a1b2c3d4-5678-90ab-cdef-EXAMPLE11111&state=abcdefg
```

## Ejemplo: solicitud de nueva autenticación con `prompt=login`
<a name="sample-authorization-code-with-prompt-login"></a>

La siguiente solicitud agrega un parámetro `prompt=login` que requiere que el usuario se autentique nuevamente, aunque ya tenga una sesión existente.

```
GET https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/authorize?
response_type=code&
client_id=1example23456789&
redirect_uri=https://www.example.com&
state=abcdefg&
scope=openid+profile+aws.cognito.signin.user.admin&
prompt=login
```

El servidor de autorización redirige al [punto de conexión de inicio de sesión](login-endpoint.md), por lo que es necesario volver a autenticarse.

```
HTTP/1.1 302 Found Location: https://mydomain.auth.us-east-1.amazoncognito.com/login?response_type=code&client_id=1example23456789&redirect_uri=https://www.example.com&state=abcdefg&scope=openid+profile+aws.cognito.signin.user.admin&prompt=login
```

## Ejemplo: autenticación silenciosa con `prompt=none`
<a name="sample-authorization-code-with-prompt-none"></a>

La siguiente solicitud agrega un parámetro `prompt=none` que compruebe silenciosamente si el usuario tiene una sesión válida.

```
GET https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/authorize?
response_type=code&
client_id=1example23456789&
redirect_uri=https://www.example.com&
state=abcdefg&
scope=openid+profile+aws.cognito.signin.user.admin&
prompt=none
```

Cuando no existe una sesión válida, el servidor de autorización devuelve un error al URI de redireccionamiento

```
HTTP/1.1 302 Found Location: https://www.example.com?error=login_required&state=abcdefg
```

Cuando existe una sesión válida, el servidor de autorización devuelve un código de autorización.

```
HTTP/1.1 302 Found Location: https://www.example.com?code=AUTHORIZATION_CODE&state=abcdefg
```

## Ejemplo: concesión de código de autorización con vinculación de recursos
<a name="sample-authorization-code-with-resource-binding"></a>

La siguiente solicitud agrega un parámetro `resource` para vincular el token de acceso a un servidor de recursos específico. El token de acceso resultante crea las condiciones para que la API de destino valide que se trata de la audiencia prevista de la solicitud del usuario autenticado.

```
GET https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/authorize?
response_type=code&
client_id=1example23456789&
redirect_uri=https://www.example.com&
state=abcdefg&
scope=solar-system-data-api.example.com/asteroids.add&
resource=https://solar-system-data-api.example.com
```

El servidor de autorización devuelve un código de autorización que da como resultado un token de acceso con una reclamación `aud` de `https://solar-system-data-api.example.com`.

```
HTTP/1.1 302 Found Location: https://www.example.com?code=AUTHORIZATION_CODE&state=abcdefg
```

## Ejemplo: concesión (implícita) de un token sin ámbito `openid`
<a name="sample-token-grant-without-openid-scope"></a>

Este flujo de ejemplo genera una concesión implícita y vuelve JWTs directamente a la sesión del usuario.

La solicitud sirve para obtener una concesión implícita del servidor de autorización. Solicita ámbitos en el token de acceso que autoricen las operaciones de autoservicio del perfil de usuario.

```
GET https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/authorize?
response_type=token&
client_id=1example23456789&
redirect_uri=https://www.example.com&
state=abcdefg&
scope=aws.cognito.signin.user.admin
```

El servidor de autorización redirige de vuelta a su aplicación solo con un token de acceso. Dado que no se ha solicitado el ámbito `openid`, Amazon Cognito no devuelve un token de ID. Además, Amazon Cognito no devuelve un token de actualización en este flujo.

```
HTTP/1.1 302 Found
Location: https://example.com/callback#access_token=eyJra456defEXAMPLE&token_type=bearer&expires_in=3600&state=STATE
```

## Ejemplo: concesión (implícita) de un token con ámbito `openid`
<a name="sample-token-grant-with-openid-scope"></a>

Este flujo de ejemplo genera una concesión implícita y devuelve tokens al navegador del usuario.

La solicitud sirve para obtener una concesión implícita del servidor de autorización. Solicita ámbitos en el token de acceso que autorizan el acceso a los atributos del usuario y a las operaciones de autoservicio.

```
GET
https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/authorize? 
response_type=token& 
client_id=1example23456789& 
redirect_uri=https://www.example.com& 
state=abcdefg&
scope=aws.cognito.signin.user.admin+openid+profile
```

El servidor de autorización redirige a la aplicación con el token de acceso y el token de ID (porque se ha incluido el ámbito `openid`):

```
HTTP/1.1 302 Found
Location: https://www.example.com#id_token=eyJra67890EXAMPLE&access_token=eyJra12345EXAMPLE&token_type=bearer&expires_in=3600&state=abcdefg
```

## Ejemplos de respuestas negativas
<a name="get-authorize-negative"></a>

Amazon Cognito podría denegar la solicitud. Las solicitudes negativas vienen con un código de error HTTP y una descripción que puede utilizar para corregir los parámetros de la solicitud. A continuación se proporcionan ejemplos de respuestas negativas.
+ Si `client_id` y `redirect_uri` son válidos, pero los parámetros de solicitud no tienen el formato correcto, el servidor de autenticación redirige el error al `redirect_uri` del cliente y añade un mensaje de error en un parámetro URL. A continuación se proporcionan ejemplos de formatos incorrectos.
  + La solicitud no incluye un parámetro `response_type`.
  + La solicitud de autorización ha proporcionado un parámetro `code_challenge`, pero no un parámetro `code_challenge_method`.
  + El valor del parámetro `code_challenge_method` no es `S256`.

  A continuación mostramos un ejemplo de respuesta con formato incorrecto.

  ```
  HTTP 1.1 302 Found Location: https://client_redirect_uri?error=invalid_request
  ```
+ Si el cliente solicita `code` o `token` en `response_type`, pero no tiene permiso para estas solicitudes, el servidor de autorización de Amazon Cognito devuelve `unauthorized_client` al `redirect_uri` del cliente, tal y como se indica a continuación:

  ```
  HTTP 1.1 302 Found Location: https://client_redirect_uri?error=unauthorized_client
  ```
+  Si el cliente solicita un ámbito no válido, desconocido o con un formato incorrecto, el servidor de autorización de Amazon Cognito devuelve `invalid_scope` al `redirect_uri` del cliente, tal y como se indica a continuación: 

  ```
  HTTP 1.1 302 Found Location: https://client_redirect_uri?error=invalid_scope
  ```
+ Si se produce algún error inesperado en el servidor, el servidor de autenticación devuelve `server_error` al `redirect_uri` del cliente. No debe mostrarse el error HTTP 500 en el navegador del usuario porque este error no se envía al cliente. El servidor de autorización devuelve el siguiente error.

  ```
  HTTP 1.1 302 Found Location: https://client_redirect_uri?error=server_error
  ```
+ Cuando Amazon Cognito se autentica mediante la federación con un tercero, Amazon IdPs Cognito puede experimentar problemas de conexión, como los siguientes:
  + Si se produce un tiempo de espera de conexión al solicitar un token desde el IdP, el servidor de autenticación redirecciona el error al `redirect_uri` del cliente como se muestra a continuación:

    ```
    HTTP 1.1 302 Found Location: https://client_redirect_uri?error=invalid_request&error_description=Timeout+occurred+in+calling+IdP+token+endpoint
    ```
  + Si se agota el tiempo de espera durante la llamada al punto de conexión `jwks_uri` para validar el token de ID, el servidor de autenticación redirige el error al `redirect_uri` del cliente, tal y como se indica a continuación:

    ```
    HTTP 1.1 302 Found Location: https://client_redirect_uri?error=invalid_request&error_description=error_description=Timeout+in+calling+jwks+uri
    ```
+ Al autenticarse mediante la federación con un tercero, es posible que los proveedores IdPs devuelvan respuestas de error. Esto puede deberse a errores de configuración u otros motivos, como los siguientes:
  + Si se recibe una respuesta de error de otros proveedores, el servidor de autenticación redirige el error al `redirect_uri` del cliente como se muestra a continuación:

    ```
    HTTP 1.1 302 Found Location: https://client_redirect_uri?error=invalid_request&error_description=[IdP name]+Error+-+[status code]+error getting token
    ```
  + Si se recibe una respuesta de error de Google, el servidor de autenticación redirige el error al `redirect_uri` del cliente como se muestra a continuación: 

    ```
    HTTP 1.1 302 Found Location: https://client_redirect_uri?error=invalid_request&error_description=Google+Error+-+[status code]+[Google-provided error code]
    ```
+ En caso de que Amazon Cognito encuentre una excepción de comunicación al realizar cualquier conexión con un IdP externo, el servidor de autenticación redirige con un error al `redirect_uri` del cliente con alguno de los siguientes mensajes:
  + 

    ```
    HTTP 1.1 302 Found Location: https://client_redirect_uri?error=invalid_request&error_description=Connection+reset
    ```
  + 

    ```
    HTTP 1.1 302 Found Location: https://client_redirect_uri?error=invalid_request&error_description=Read+timed+out
    ```

# 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`. 

# El punto de conexión de los atributos de usuario
<a name="userinfo-endpoint"></a>

Cuando OIDC emite fichas de identificación que contienen atributos de usuario, la OAuth versión 2.0 implementa el punto final. `/oauth2/userInfo` Un usuario o cliente autenticado recibe un token de acceso con una notificación `scopes`. Esta notificación determina los atributos que debe devolver el servidor de autorización. Cuando una aplicación presenta un token de acceso al punto de conexión `userInfo`, el servidor de autorización devuelve en el cuerpo de la respuesta los atributos del usuario que entran en los límites establecidos por los ámbitos del token de acceso. La aplicación puede recuperar información sobre un usuario desde el punto de conexión `userInfo` siempre que disponga de un token de acceso válido que tenga al menos una notificación de ámbito `openid`.

El punto de conexión `userInfo` es un [punto de conexión userInfo](https://openid.net/specs/openid-connect-core-1_0.html#UserInfo) de OpenID Connect (OIDC). Responde con los atributos de usuario cuando los proveedores de servicios presentan tokens de acceso que su [punto de conexión de token](token-endpoint.md) ha emitido. Los ámbitos del token de acceso de su usuario definen los atributos de usuario que el punto de conexión userInfo devuelve en su respuesta. El ámbito `openid` debe ser una de las notificaciones del token de acceso.

Amazon Cognito emite tokens de acceso en respuesta a solicitudes de la API de grupos de usuarios como [https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html). Como no contienen ningún ámbito, el punto de conexión userInfo no acepta estos tokens de acceso. En su lugar, debe presentar los tokens de acceso desde el punto de conexión del token.

Su proveedor de identidad (IdP) externo OAuth 2.0 también aloja un userInfo punto final. Cuando su usuario se autentica con ese IdP, Amazon Cognito intercambia silenciosamente un código de autorización con el punto de conexión `token` del IdP. Su grupo de usuarios pasa el token de acceso del IdP para autorizar la recuperación de la información del usuario desde el punto de conexión `userInfo` del IdP.

Los ámbitos en el token de acceso de un usuario vienen determinados por el parámetro de solicitud `scopes` en las solicitudes de autenticación o por los ámbitos que añade el [desencadenador de Lambda Antes de la generación del token](user-pool-lambda-pre-token-generation.md). Puede decodificar los tokens de acceso y examinar las reclamaciones `scope` para ver los ámbitos de control de acceso que contienen. A continuación, encontrará algunas combinaciones de ámbitos que influyen en los datos devueltos desde el punto de conexión `userInfo`. El ámbito reservado `aws.cognito.signin.user.admin` de Amazon Cognito no afecta a los datos devueltos desde este punto de conexión.Ejemplos de los ámbitos del token de acceso y su efecto en la respuesta de `userInfo`

**`openid`**  
Devuelve una respuesta con todos los atributos de usuario que el cliente de la aplicación puede leer.

**`openid profile`**  
Devuelve los atributos de usuario `name`, `family_name`, `given_name`, `middle_name`, `nickname`, `preferred_username`, `profile`, `picture`, `website`, `gender`, `birthdate`, `zoneinfo`, `locale` y `updated_at`. También devuelve [atributos personalizados](user-pool-settings-attributes.md#user-pool-settings-custom-attributes). En los clientes de aplicación que no tienen acceso de lectura a cada atributo, la respuesta a este ámbito son todos los atributos de la especificación a los que el cliente de aplicación sí tiene acceso de lectura.

**`openid email`**  
Devuelve la información de perfil básica y los atributos `email` y `email_verified`.

**`openid phone`**  
Devuelve la información de perfil básica y los atributos `phone_number` y `phone_number_verified`.

## GET /oauth2/userInfo
<a name="get-userinfo"></a>

Su aplicación genera solicitudes a este punto de conexión directamente, sin pasar por un navegador.

Para obtener más información, consulte el tema sobre el [punto de conexión UserInfo](http://openid.net/specs/openid-connect-core-1_0.html#UserInfo) en la especificación OpenID Connect (OIDC).

**Topics**
+ [GET /oauth2/userInfo](#get-userinfo)
+ [Parámetros de la solicitud en el encabezado](#get-userinfo-request-header-parameters)
+ [Ejemplo: Solicitud](#get-userinfo-positive-exchanging-authorization-code-for-userinfo-sample-request)
+ [Ejemplo: Respuesta positiva](#get-userinfo-response-sample)
+ [Ejemplo: Respuestas negativas](#get-userinfo-negative)

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

**`Authorization: Bearer <access_token>`**  
Pasa el token de acceso en el campo de encabezado de autorización.  
Obligatorio.

## Ejemplo: Solicitud
<a name="get-userinfo-positive-exchanging-authorization-code-for-userinfo-sample-request"></a>

```
GET /oauth2/userInfo HTTP/1.1
Content-Type: application/x-amz-json-1.1
Authorization: Bearer eyJra12345EXAMPLE
User-Agent: [User agent]
Accept: */*
Host: auth.example.com
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
```

## Ejemplo: Respuesta positiva
<a name="get-userinfo-response-sample"></a>

```
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: [Integer]
Date: [Timestamp]
x-amz-cognito-request-id: [UUID]
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
Server: Server
Connection: keep-alive
{
    "sub": "[UUID]",
    "email_verified": "true",
    "custom:mycustom1": "CustomValue",
    "phone_number_verified": "true",
    "phone_number": "+12065551212",
    "email": "bob@example.com",
    "username": "bob"
}
```

Para obtener una lista de las notificaciones OIDC, consulte el tema sobre [notificaciones estándar](http://openid.net/specs/openid-connect-core-1_0.html#StandardClaims). Actualmente, Amazon Cognito devuelve los valores para `email_verified` y `phone_number_verified` como cadenas.

## Ejemplo: Respuestas negativas
<a name="get-userinfo-negative"></a>

### Ejemplo: Respuesta incorrecta
<a name="get-userinfo-negative-400"></a>

```
HTTP/1.1 400 Bad Request
WWW-Authenticate: error="invalid_request",
error_description="Bad OAuth2 request at UserInfo Endpoint"
```

**`invalid_request`**  
Falta un parámetro obligatorio en la solicitud; la solicitud incluye un valor de parámetro no admitido o tiene un formato incorrecto.

### Ejemplo: Token incorrecto
<a name="get-userinfo-negative-401"></a>

```
HTTP/1.1 401 Unauthorized
WWW-Authenticate: error="invalid_token",
error_description="Access token is expired, disabled, or deleted, or the user has globally signed out."
```

**`invalid_token`**  
El token de acceso ha caducado, se ha revocado, no tiene el formato correcto o no es válido.

# El punto de conexión de revocación del token
<a name="revocation-endpoint"></a>

Los usuarios que tienen un token de actualización en su sesión tienen algo parecido a una cookie del navegador. Pueden renovar la sesión en curso siempre que el token de actualización sea válido. En lugar de pedirle al usuario que inicie sesión cuando su token de ID o de acceso caduquen, la aplicación puede usar el token de actualización para obtener tokens nuevos que sean válidos. Sin embargo, puede darse el caso de que externamente decida que la sesión de un usuario debe finalizar, o bien el usuario puede optar por olvidar la sesión en curso. En esa situación, puede revocar el token de actualización para que el usuario no pueda continuar con la sesión.

El punto de conexión `/oauth2/revoke` revoca un token de acceso de usuario que Amazon Cognito ha emitido inicialmente con el token de actualización proporcionado. El punto de conexión también revoca el token de actualización y todos los tokens de acceso e identidad posteriores del mismo token de actualización. Una vez que el punto de conexión revoque los tokens, no podrá usarlos para acceder a los tokens de Amazon Cognito autenticados. APIs 

## POST/oauth2/revoke
<a name="post-revoke"></a>

El punto de enlace `/oauth2/revoke` solo admite `HTTPS POST`. El cliente del grupo de usuarios realiza solicitudes a este punto de enlace directamente y no a través del navegador del sistema.

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

**`Authorization`**  
Si el cliente de aplicación tiene un secreto de cliente, la aplicación debe pasar el `client_id` y el `client_secret` del encabezado de la autorización mediante una autorización de HTTP básico. El secreto es [Basic](https://en.wikipedia.org/wiki/Basic_access_authentication#Client_side) `Base64Encode(client_id:client_secret)`.

**`Content-Type`**  
Debe ser siempre `'application/x-www-form-urlencoded'`.

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

**`token`**  
(Obligatorio) El token de actualización que el cliente quiere revocar. La solicitud también revoca todos los tokens de acceso que Amazon Cognito emitió desde este token de actualización.  
Obligatorio.

**`client_id`**  
(Opcional) El ID de cliente de aplicación del token que quiere revocar.  
Obligatorio si el cliente es público y no tiene ningún secreto.

## Ejemplo de solicitud de revocación
<a name="revoke-sample-request"></a>

Esta solicitud de revocación revoca un token de actualización para un cliente de aplicación que no tiene secreto de cliente. Observe el parámetro `client_id` en el cuerpo de la solicitud.

```
POST /oauth2/revoke HTTP/1.1
Host: mydomain.auth.us-east-1.amazoncognito.com
Accept: application/json
Content-Type: application/x-www-form-urlencoded
token=2YotnFZFEjr1zCsicMWpAA&
client_id=1example23456789
```

Esta solicitud de revocación revoca un token de actualización para un cliente de aplicación que *tiene* un secreto de cliente. Observe el encabezado `Authorization` que contiene un ID de cliente y un secreto de cliente codificados, pero no `client_id` en el cuerpo de la solicitud.

```
POST /oauth2/revoke HTTP/1.1
Host: mydomain.auth.us-east-1.amazoncognito.com
Accept: application/json
Content-Type: application/x-www-form-urlencoded
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
token=2YotnFZFEjr1zCsicMWpAA
```

## Respuesta de error de revocación
<a name="revoke-sample-response"></a>

En una respuesta satisfactoria, se incluye un cuerpo vacío. La respuesta de error es un objeto JSON con un campo `error` y, en algunos casos, un campo `error_description`.

**Errores de punto de conexión**
+ Se devuelve HTTP 400 y el error `invalid_request` si el token no está presente en la solicitud o si la característica se desactiva para el cliente de aplicación.
+ Si el token que Amazon Cognito envió en la solicitud de revocación no es un token de actualización, recibirá un HTTP 400 y un error `unsupported_token_type`.
+ Si las credenciales de cliente no son válidas, recibirá un HTTP 401 y un error `invalid_client`.
+ Si el token se ha revocado o si el cliente ha enviado un token que no es válido, recibirá un HTTP 200 OK. 

# El punto de conexión de aserción del IdP SAML
<a name="saml2-idpresponse-endpoint"></a>

`/saml2/idpresponse` recibe aserciones de SAML. Al iniciar sesión service-provider-initiated (iniciado por SP), la aplicación no interactúa directamente con este punto final: el proveedor de identidad (IdP) de SAML 2.0 redirige al usuario aquí con su respuesta de SAML. Para el inicio de sesión iniciado por el SP, configure el IdP con la ruta de `saml2/idpresponse` como URL de Assertion Consumer Service (ACS). Para obtener más información acerca del inicio de sesión, consulte [Inicio de sesión SAML en grupos de usuarios de Amazon Cognito](cognito-user-pools-SAML-session-initiation.md).

En el inicio de sesión iniciado por el IdP, invoque las solicitudes a este punto de conexión en su aplicación después de iniciar sesión como usuario con el proveedor SAML 2.0. Los usuarios inician sesión con el IdP en su navegador y, a continuación, la aplicación recopila la aserción de SAML y la envía a este punto de conexión. Debe enviar las aserciones de SAML en el cuerpo de una solicitud `HTTP POST` en HTTPS. El cuerpo de la solicitud `POST` debe ser un parámetro `SAMLResponse` y un parámetro `Relaystate`. Para obtener más información, consulte [Implementación del inicio de sesión de SAML iniciado por el IdP](cognito-user-pools-SAML-session-initiation.md#cognito-user-pools-SAML-session-initiation-idp-initiation).

El punto de conexión `saml2/idpresponse` puede aceptar aserciones SAML de hasta 100 000 caracteres de longitud.

## POST `/saml2/idpresponse`
<a name="saml2-idpresponse-endpoint-post"></a>

Para usar el punto de conexión `/saml2/idpresponse` en un inicio de sesión iniciado por el IdP, genere una solicitud POST con parámetros que proporcionen al grupo de usuarios información sobre la sesión de su usuario.
+ El cliente de aplicación en el que el usuario desee iniciar sesión.
+ La URL de devolución de llamada en la que quiere terminar.
+ Los ámbitos OAuth 2.0 que quieren solicitar en el token de acceso de tu usuario.
+ El IdP que ha iniciado la solicitud de inicio de sesión.

### Parámetros del cuerpo de la solicitud iniciada por el IdP
<a name="saml2-idpresponse-endpoint-post-request"></a>

*SAMLResponse*  
Aserción de SAML codificada en Base64 de un IdP asociado a un cliente de aplicación válido y a una configuración de IdP de su grupo de usuarios.

*RelayState*  
Un parámetro `RelayState` contiene los parámetros de solicitud que, de otro modo, se pasarían al punto de conexión `oauth2/authorize`. Para obtener más información sobre estos parámetros, consulte [Autorizar punto de conexión](authorization-endpoint.md).    
*response\$1type*  
El tipo de subvención OAuth 2.0.  
*client\$1id*  
El ID de cliente de aplicación.  
*redirect\$1uri*  
La dirección URL a la que el servidor de autenticación redirige el navegador después de que Amazon Cognito autorice al usuario.  
*identity\$1provider*  
El nombre del proveedor de identidades al que desea redirigir al usuario.  
*idp\$1identifier*  
El identificador del proveedor de identidades al que desea redirigir el usuario.  
*scope*  
Los ámbitos OAuth 2.0 que desea que el usuario solicite al servidor de autorización.

### Ejemplo de solicitudes con respuestas positivas
<a name="saml2-idpresponse-endpoint-post-example"></a>

**Ejemplo: Solicitud POST**  
La siguiente solicitud sirve para la concesión de un código de autorización para un usuario desde el IdP `MySAMLIdP` en el cliente de aplicación `1example23456789`. El usuario lo redirige `https://www.example.com` con su código de autorización, que se puede cambiar por símbolos que incluyan un token de acceso con el alcance OAuth 2.0`openid`, `email` y. `phone`

```
POST /saml2/idpresponse HTTP/1.1
User-Agent: USER_AGENT
Accept: */*
Host: example.auth.us-east-1.amazoncognito.com
Content-Type: application/x-www-form-urlencoded

SAMLResponse=[Base64-encoded SAML assertion]&RelayState=identity_provider%3DMySAMLIdP%26client_id%3D1example23456789%26redirect_uri%3Dhttps%3A%2F%2Fwww.example.com%26response_type%3Dcode%26scope%3Demail%2Bopenid%2Bphone
```

**Ejemplo: Respuesta**  
A continuación se muestra una respuesta a la solicitud anterior.

```
HTTP/1.1 302 Found
Date: Wed, 06 Dec 2023 00:15:29 GMT
Content-Length: 0
x-amz-cognito-request-id: 8aba6eb5-fb54-4bc6-9368-c3878434f0fb
Location: https://www.example.com?code=[Authorization code]
```