Nous cherchons à tirer parti d'AWS Cognito pour l'authentification avec une architecture qui ressemble à: client (browser) -> our server -> AWS Cognito
Avec diverses configurations définies, initiateAuth
ne semble pas différent de AdminInitiateAuth
et j'aimerais donc comprendre quand sous ces configurations s'il est important de choisir l'une plutôt que l'autre.
Il semble que lorsque je crée une application avec un client secret
et utilisez initiateAuth
, il semble que ce soit presque la même expérience d'intégration que adminInitiateAuth
qui utilise le ADMIN_NO_SRP_AUTH
flux d'authentification. Ce dernier ne nécessite même pas d'informations d'identification AWS comme indiqué dans la documentation AWS. Mon intégration avec Cognito est la suivante:
initierAuth:
const payload = {
AuthFlow: "USER_PASSWORD_AUTH",
ClientId: cognitoClientId,
AuthParameters: {
USERNAME: username,
PASSWORD: password,
SECRET_HASH: generateSignature(username)
}
}
const response = await cognitoClient.initiateAuth(payload).promise();
adminInitiateAuth:
const payload = {
UserPoolId: userPoolId,
AuthFlow: "ADMIN_NO_SRP_AUTH",
ClientId: cognitoClientId,
AuthParameters: {
USERNAME: username,
PASSWORD: password,
SECRET_HASH: generateSignature(username)
}
}
const response = await cognitoClient.adminInitiateAuth(payload).promise();
Vous pouvez voir la différence entre les différentes valeurs de AuthFlow
, appelant différentes méthodes et ADMIN_NO_SRP_AUTH
nécessitant le paramètre UserPoolId
qui me semble superficiel.
Nous générons également la signature basée sur le secret client, quelque chose que nous traiterions en toute sécurité.
Moi aussi, j'ai passé pas mal de temps à rechercher de la documentation rare sur le moment d'utiliser AdminInitiateAuth vs InitiateAuth.
https://docs.aws.Amazon.com/cognito/latest/developerguide/Amazon-cognito-user-pools-authentication-flow.html est censé aider, mais je le trouve mal structuré et Très perturbant.
D'après ma compréhension, vous avez raison, vous pouvez utiliser les deux approches sur le serveur:
InitiateAuth
avec AuthFlow=USER_PASSWORD_AUTH
(nécessite que le client d'application soit créé avec le secret client).AdminInitiateAuth
avec AuthFlow=ADMIN_USER_PASSWORD_AUTH
(remplacé l'héritage ADMIN_NO_SRP_AUTH
)Je pense que la deuxième option est plus logique pour le scénario d'utilisation du serveur. De cette façon, vous pouvez désactiver ALLOW_USER_PASSWORD_AUTH
flux d'authentification dans les paramètres du client d'application. Bien que ce ne soit probablement pas un risque énorme, il semble plus propre de ne pas avoir InitiateAuth
API ouverte au public car elle n'est pas requise.