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:
-
Crear una cuenta en el plan gratuito para desarrolladores: https://developer.okta.com/signup/
-
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:
-
Dirigirse a Applications → Create App Integrations /admin/apps/active
-
Seleccionar SAML 2.0 como tipo de integración.
-
Completar la información general de la aplicación:
- Nombre de la integración SAML.
- Logo (opcional).
-
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:
| Flujo | Recomendado | Descripción |
|---|---|---|
| ALLOW_USER_PASSWORD_AUTH | Sí | Permite autenticación directa por API enviando usuario y contraseña. |
| ALLOW_USER_SRP_AUTH | Sí | Utiliza SRP, más seguro al no enviar la contraseña en texto plano. |
| ALLOW_REFRESH_TOKEN_AUTH | Sí | Permite renovar tokens sin solicitar nuevamente credenciales. |
| ALLOW_ADMIN_USER_PASSWORD_AUTH | Opcional | Solo si se utiliza un backend que llame Admin APIs. |
| ALLOW_CUSTOM_AUTH | Opcional | Necesario ú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_HASHes 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.