Integrar cognito con azure AD

Uno de los problemas que te podrías encontrar a la hora de incursionar y configurar las integraciones externas como  SAML con azure AD, es que es muy complejo y tienes que navegar entre diferentes pantallas para poder configurar lo que dice  la documentación oficial de cognitivo.

Bueno vamos a crear una plantilla de CloudFormation para que nos configure cognito automáticamente.

  1. Creamos en azure una aplicación empresarial

2. Seleccionamos saml

urn:amazon:cognito:sp:<yourUserPoolID>

URL de respuesta. La URL de respuesta es desde donde la aplicación espera recibir el token de autenticación. Esto también se conoce como el "Servicio al consumidor de afirmaciones" (ACS) en SAML.

Debe seguir el patrón:

https://<yourDomainPrefix>.auth.<yourRegion>.amazoncognito.com/saml2/idpresponse

Ejemplo de identificador y URL de respuesta:
Identificador:  urn: amazon: cognito: sp: us-east-1_XX123xxXXX
URL de respuesta:

 https://example-setup-app.auth.us-east-1.amazoncognito.com/saml2/idpresponse

Plantilla de terraform

AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Description:  federation saml Azure AD


Parameters: 
  PoolID:
    Type: String
    Default: "us-xxx-2_xxx"

  DomainCognito:
    Type: String
    Default: "my-test-usernleguizamon"

  DefaultRedirectURI:
    Type: String
    Default: "http://localhost:4200/"
    
  CallbackURLsApps:
    Type: CommaDelimitedList
    Description: "CallbackURLs applications "
    Default: "http://localhost:4200/,http://localhost:3000"

  LogoutURLsApps: 
    Type: CommaDelimitedList
    Description: "LogoutURLs applications "
    Default: "http://localhost:4200/logout,http://localhost:3000/logout"
    
  MetadataURLAzureAD:
    Type: String
    Default: ""

Resources:
  clientAppauth:
    Type: AWS::Cognito::UserPoolClient
    Properties:
      UserPoolId: !Ref PoolID
      RefreshTokenValidity: 1
      AccessTokenValidity: 1
      IdTokenValidity: 1
      TokenValidityUnits: 
          AccessToken: "days"
          IdToken: "days"
          RefreshToken: "days"
      GenerateSecret: true
      CallbackURLs: !Ref CallbackURLsApps
      DefaultRedirectURI: !Ref DefaultRedirectURI
      LogoutURLs: !Ref LogoutURLsApps
      AllowedOAuthFlowsUserPoolClient: true
      EnableTokenRevocation: true
      SupportedIdentityProviders: 
       - !Ref UserPoolIdentityProvider
      AllowedOAuthFlows:
       - implicit
       #- code
       #- client_credentials
      AllowedOAuthScopes:
        - phone
        - email
        - openid
        - profile
      ReadAttributes:
        - address
        - nickname
        - birthdate
        - phone_number
        - email
        - phone_number_verified
        - email_verified
        - picture
        - family_name
        - preferred_username
        - gender
        - profile
        - given_name
        - zoneinfo
        - locale
        - updated_at
        - middle_name
        - website
        - name


  UserPoolIdentityProvider:
    Type: AWS::Cognito::UserPoolIdentityProvider
    Properties:
      UserPoolId: !Ref PoolID
      ProviderName: "demo"
      ProviderDetails:
        MetadataURL: !Ref MetadataURLAzureAD
        IDPSignout: true     
      ProviderType: "SAML"
      AttributeMapping:
       # parameterCognito : Pramentros 
        "email": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress"
        "email_verified": "stage"
        #"custom:groups": "groups"
        "family_name": "familyName"
      IdpIdentifiers:
        - "demo"


  UserPoolDomain: 
    Type: AWS::Cognito::UserPoolDomain 
    Properties:
      UserPoolId: !Ref PoolID 
      Domain: !Ref DomainCognito

Referencia:

AWS::Cognito::UserPoolIdentityProvider - AWS CloudFormation
Use the AWS CloudFormation AWS::Cognito::UserPoolIdentityProvider resource for Cognito.
How to set up AWS Cognito with federation to Office365