Skip to main content

Integración de AWS Cognito con Okta

Este documento recopila los recursos y pasos utilizados para habilitar el inicio de sesión por API en AWS Cognito User Pools con integración federada mediante Okta.


Integración con Okta mediante SAML 2.0

Este documento describe el procedimiento para integrar Okta como proveedor de identidad (IdP) utilizando SAML 2.0. La configuración está orientada a entornos de desarrollo y producción que requieran autenticación federada con Okta.

1. Crear una cuenta en Okta Developer

Para iniciar el proceso de integración:

  1. Crear una cuenta en el plan gratuito para desarrolladores: https://developer.okta.com/signup/

  2. Una vez completado el registro, acceder al panel de administración de Okta: /admin/dashboard

2. Crear una integración de aplicación SAML

En el panel de administración:

  1. Dirigirse a ApplicationsCreate App Integrations /admin/apps/active

  2. Seleccionar SAML 2.0 como tipo de integración.

  3. Completar la información general de la aplicación:

    • Nombre de la integración SAML.
    • Logo (opcional).
  4. Configurar los parámetros de SAML:

Configuración SAML requerida

  • Single sign-on URL:

    <domain>/saml2/idpresponse
  • Audience URI (SP Entity ID):

    urn:amazon:cognito:<User Pool ID>

El valor <User Pool ID> debe corresponder al ID del User Pool de Amazon Cognito o al Service Provider configurado.

3. Obtención del Metadata URL

Una vez creada la integración SAML, Okta generará automáticamente un Metadata URL. Este enlace contiene la información necesaria para configurar el proveedor SAML en el Service Provider (por ejemplo, Amazon Cognito).

Este URL deberá ser registrado en el sistema donde se configurará la autenticación federada.

4. Resultado esperado

Después de completar los pasos anteriores, se dispone de:

  • Una aplicación SAML configurada en Okta.
  • El Metadata URL necesario para la integración con el proveedor de servicio.
  • Los parámetros requeridos para establecer el flujo de autenticación SAML.

Habilitar inicio de sesión por API en AWS Cognito (User Pools)

Este documento describe el procedimiento para habilitar la autenticación directa mediante API en Amazon Cognito, sin utilizar la interfaz hospedada (Hosted UI). El objetivo es permitir que una aplicación pueda autenticarse enviando username y password para obtener los tokens correspondientes (ID Token, Access Token y Refresh Token) a través de OAuth 2.0.

1. Configuración de flujos de autenticación

Para habilitar la autenticación por API:

Ruta en AWS Console:

Amazon Cognito → User Pools → (Seleccionar User Pool)
→ Clientes de aplicación → (Seleccionar App Client)
→ Editar la información del cliente de aplicación

En la sección Flujos de autenticación, habilitar lo siguiente:

FlujoRecomendadoDescripción
ALLOW_USER_PASSWORD_AUTHPermite autenticación directa por API enviando usuario y contraseña.
ALLOW_USER_SRP_AUTHUtiliza SRP, más seguro al no enviar la contraseña en texto plano.
ALLOW_REFRESH_TOKEN_AUTHPermite renovar tokens sin solicitar nuevamente credenciales.
ALLOW_ADMIN_USER_PASSWORD_AUTHOpcionalSolo si se utiliza un backend que llame Admin APIs.
ALLOW_CUSTOM_AUTHOpcionalNecesario únicamente para flujos personalizados con Lambda Triggers.

2. Autenticación mediante API (InitiateAuth)

Una vez configurados los flujos, es posible autenticar usuarios directamente utilizando el endpoint de Cognito Identity Provider.

Endpoint

POST https://cognito-idp.<REGION>.amazonaws.com

Ejemplo (us-east-1):

POST https://cognito-idp.us-east-1.amazonaws.com

Headers requeridos

X-Amz-Target: AWSCognitoIdentityProviderService.InitiateAuth
Content-Type: application/x-amz-json-1.1

Body del request

{
"AuthFlow": "USER_PASSWORD_AUTH",
"ClientId": "<CLIENT_ID>",
"AuthParameters": {
"USERNAME": "<email o username>",
"PASSWORD": "<contraseña>",
"SECRET_HASH": "<Base64(HMAC_SHA256( ClientSecretKey , Username + ClientId ))>"
}
}

Nota: SECRET_HASH es obligatorio si el App Client tiene un Client Secret habilitado.

3. Respuesta esperada

Si las credenciales son válidas, Cognito retornará:

  • AccessToken
  • IdToken
  • RefreshToken

Ejemplo de propiedades devueltas:

{
"AuthenticationResult": {
"AccessToken": "...",
"IdToken": "...",
"RefreshToken": "...",
"ExpiresIn": 3600,
"TokenType": "Bearer"
}
}

Este proyecto documenta el flujo de autenticación entre Cognito y Okta, incluyendo intercambio de tokens, validación de usuarios y endpoints para pruebas directas.