Punto de conexión del emisor del token - Amazon Cognito

Punto de conexión del emisor del token

El punto de conexión de tokens de OAuth 2.0 en /oauth2/token emite tokens web JSON (JWT). 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 OAuth 2.0 de su grupo de usuarios emite tokens web JSON (JWT) desde el punto de conexión de tokens 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.

  2. Sesiones de máquina a máquina (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.

  3. 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 un código de autorización otorgado en la interfaz de usuario alojada 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 no estén activos en el grupo de usuarios. Si los dispositivos recordados están activos, actualice los tokens con AuthFlow de REFRESH_TOKEN_AUTH en las solicitudes de API InitiateAuth o AdminInitiateAuth.

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.

Puede obtener más información sobre los clientes de aplicación del grupo de usuarios y sus tipos de concesión, secretos de cliente, ámbitos autorizados e ID de cliente en Ajustes específicos de una aplicación en los clientes de aplicación. 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 API con servidores de recursos.

Para recuperar información sobre un usuario a partir de su token de acceso, páselo a su El punto de conexión userInfo o a una solicitud de API GetUser.

POST /oauth2/token

El punto de enlace /oauth2/token solo admite HTTPS POST. El cliente de grupo de usuarios realiza solicitudes a este punto de enlace directamente y no mediante un navegador.

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 OpenID Connect, consulte Client Authentication. 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.

Parámetros de la solicitud en el encabezado

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 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

grant_type

(Obligatorio) El tipo de concesión de 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.

client_id

(Opcional) El ID de un cliente de aplicación 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) El secreto del cliente de aplicación que ha autenticado al usuario. Obligatorio si el cliente de aplicación tiene un secreto de cliente y no ha enviado un encabezado Authorization.

scope

(Opcional) Puede ser una combinación de cualquier ámbito personalizado que esté asociado a un cliente de aplicación. Todo ámbito que solicite debe estar activado para el cliente de aplicación. Si no lo está, Amazon Cognito lo omitirá. Si el cliente no solicita ningún ámbito, el servidor de autenticación asigna todos los ámbitos personalizados que haya autorizado en la configuración del cliente de aplicación.

Solo se usa si grant_type es client_credentials.

redirect_uri

(Opcional) Debe ser el mismo redirect_uri que el que se ha utilizado para obtener authorization_code en /oauth2/authorize.

Debe proporcionar este parámetro si grant_type es authorization_code.

refresh_token

(Opcional) Para generar tokens de acceso e identificación nuevos para la sesión de un usuario, defina el valor del parámetro refresh_token en la solicitud de /oauth2/token con un token de actualización emitido anteriormente desde el mismo cliente de aplicación.

code

(Opcional) 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.

code_verifier

(Opcional) El valor arbitrario que ha utilizado para calcular el code_challenge en una solicitud de concesión de código de autorización con la PKCE.

Ejemplo de solicitudes con respuestas positivas

Intercambio de un código de autorización para los tokens

Ejemplo: Solicitud POST

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

Ejemplo: Respuesta

HTTP/1.1 200 OK Content-Type: application/json { "access_token": "eyJra1example", "id_token": "eyJra2example", "refresh_token": "eyJj3example", "token_type": "Bearer", "expires_in": 3600 }
nota

El punto de enlace del token devuelve refresh_token solo cuando grant_type es authorization_code.

Intercambio de credenciales de cliente para un token de acceso: secreto del cliente en un encabezado de autorización

Ejemplo: Solicitud POST

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/scope1 resourceServerIdentifier2/scope2

Ejemplo: Respuesta

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

Intercambio de credenciales de cliente para un token de acceso: secreto del cliente en un cuerpo de solicitud

Ejemplo: Solicitud POST

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

Ejemplo: Respuesta

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" }

Intercambio de una concesión de código de autorización con PKCE para los tokens

Ejemplo: Solicitud POST

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

Ejemplo: Respuesta

HTTP/1.1 200 OK Content-Type: application/json { "access_token": "eyJra1example", "id_token": "eyJra2example", "refresh_token": "eyJj3example", "token_type": "Bearer", "expires_in": 3600 }
nota

El punto de enlace del token devuelve refresh_token solo cuando grant_type es authorization_code.

Intercambio de un token de actualización para los tokens

Ejemplo: Solicitud POST

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

Ejemplo: Respuesta

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

El punto de enlace del token devuelve refresh_token solo cuando grant_type es authorization_code.

Ejemplos de respuestas negativas

Ejemplo: Respuesta de 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 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.