Aller au contenu

Amazon Cognito

FonctionnalitéSupport
Clients OAuth2/OIDC✅ Complet
Clients SAML❌ Non pris en charge
Resource servers✅ Natif
Clonage de client✅ Complet
Rotation du secret✅ Complet
Suspension de clients❌ Non pris en charge
  1. Donner à Taco l’accès au user pool

    Taco appelle l’API des user pools Cognito avec le SDK AWS, qui lit les identifiants depuis sa chaîne de fournisseurs par défaut : AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY, AWS_PROFILE, un service account EKS (IRSA), un rôle de tâche ECS ou un profil d’instance EC2. Préférez un rôle à des clés longue durée quand Taco tourne sur AWS.

    L’identité a besoin de ces actions sur le user pool :

    {
    "Version": "2012-10-17",
    "Statement": [
    {
    "Effect": "Allow",
    "Action": [
    "cognito-idp:ListUserPoolClients",
    "cognito-idp:DescribeUserPoolClient",
    "cognito-idp:CreateUserPoolClient",
    "cognito-idp:UpdateUserPoolClient",
    "cognito-idp:DeleteUserPoolClient",
    "cognito-idp:ListUserPoolClientSecrets",
    "cognito-idp:AddUserPoolClientSecret",
    "cognito-idp:DeleteUserPoolClientSecret",
    "cognito-idp:ListResourceServers",
    "cognito-idp:DescribeResourceServer",
    "cognito-idp:CreateResourceServer",
    "cognito-idp:UpdateResourceServer",
    "cognito-idp:DeleteResourceServer"
    ],
    "Resource": "arn:aws:cognito-idp:<region>:<account-id>:userpool/<user-pool-id>"
    }
    ]
    }
  2. Définir les variables d’environnement

    Terminal window
    PROVIDER=cognito
    COGNITO_USER_POOL_ID=eu-west-1_AbCdEfGhI
    # Optionnel : par défaut la région de l'ID du user pool, puis AWS_REGION
    COGNITO_REGION=eu-west-1
  • Les clients sont des app clients du user pool. Cognito prend en charge les grants authorization_code, implicit et client_credentials ; refresh_token correspond au flux d’authentification ALLOW_REFRESH_TOKEN_AUTH. Les autres grants sont ignorés.
  • Cognito fixe à la création si un client a un secret : un client créé avec la méthode d’authentification none reste public, et un client confidentiel le reste. Pour changer, créez un nouveau client.
  • client_credentials exige un secret, ne peut pas être combiné avec authorization_code ou implicit dans le même client et n’accepte que des scopes de resource servers.
  • Les scopes sont les scopes OAuth autorisés de l’app client. Quand un client utilise un flux utilisateur sans aucun scope, Taco lui accorde openid. L’audience d’un client est déduite de ses scopes de resource servers et n’est pas stockée à part.
  • La mise à jour d’un client conserve tous les paramètres que Taco ne gère pas (durée de validité des jetons, permissions sur les attributs, fournisseurs d’identité, flux d’authentification SDK…).
  • Cognito ne peut pas servir de fournisseur d’identité SAML : les clients SAML ne sont pas disponibles.
  • Cognito ne permet pas de désactiver un app client : suspendre un client dans le workflow d’enregistrement n’est enregistré que dans Taco.
  • La rotation du secret en ajoute un nouveau avec AddUserPoolClientSecret, puis supprime les précédents pour ne garder que le nouveau.

Les resource servers sont gérés nativement dans le user pool. Leur identifiant ne peut pas être modifié après la création. Cognito nomme les scopes <identifiant>/<scope> : c’est sous cette forme qu’ils apparaissent dans Taco et qu’il faut les demander. Pour ajouter un scope, vous pouvez donner le nom seul ou le nom complet.

Pour protéger le tableau de bord Taco avec Cognito, créez un app client confidentiel séparé avec le grant authorization code et les scopes openid, email et profile :

Terminal window
AUTH_CLIENT_OPENID_CONFIGURATION_URL=https://cognito-idp.<region>.amazonaws.com/<user-pool-id>
AUTH_CLIENT_ID=your-app-client-id
AUTH_CLIENT_SECRET=your-app-client-secret

Ajoutez <BASE_URL>/api/auth/callback/oidc aux Allowed callback URLs de l’app client.