Ahora mismo estoy sumergiéndome en Cognito. La configuración de AWS ha sido bastante sencilla y sencilla.
Tenemos una variedad de aplicaciones, aplicaciones web y servicios y nos gustaría que hicieran uso del servicio Cognito. Tengo experiencia en configuraciones similares con Auth0, pero debido a que hemos estado aprovechando varios servicios web de Amazon, realmente tiene sentido usar Cognito también.
Dondequiera que miro, cada guía eventualmente hace referencia a la biblioteca y cli del lado del cliente de Amplify. Tenemos aplicaciones y servicios existentes, y realmente no queremos cambiar las herramientas ni importar nada innecesario para agregar volumen y complejidad. ¿Hay alguna forma de usar el servicio Cognito sin las bibliotecas de Amplify? ¿Existe una biblioteca de cliente liviana solo de Cognito para interactuar con el flujo de autenticación y autorización del servicio de Cognito?
Como mencionó @oieduardorabelo, simplemente puede instalar 'amazon-cognito-identity-js' donde también puede encontrar ejemplos bien hechos en npm .
Aquí está mi código de prueba para entender fácilmente esta lib. Ya debe haber creado la infraestructura en AWS (userPool, userClient y agregar un nuevo usuario para probar el inicio de sesión; en mi caso, el usuario tiene que cambiar la contraseña en el primer inicio de sesión, así que agregué este caso de uso en mi secuencia de comandos):
import * as AmazonCognitoIdentity from 'amazon-cognito-identity-js'; var authenticationData = { Username: 'email', Password: 'password', }; var authenticationDetails = new AmazonCognitoIdentity.AuthenticationDetails(authenticationData); var poolData = { UserPoolId: 'us-east-1_userpoolid', ClientId: '26pjexamplejpkvt' }; var userPool = new AmazonCognitoIdentity.CognitoUserPool(poolData); var cognitoUser = userPool.getCurrentUser(); console.log(cognitoUser); if (!cognitoUser) { var userData = { Username: authenticationData.Username, Pool: userPool }; var cognitoUser = new AmazonCognitoIdentity.CognitoUser(userData); cognitoUser.authenticateUser(authenticationDetails, { onSuccess: function (result) { var accessToken = result.getAccessToken().getJwtToken(); var idToken = result.idToken.jwtToken; console.log('Success', accessToken, idToken); }, newPasswordRequired: function (userAttributes, requiredAttributes) { delete userAttributes.email_verified; cognitoUser.completeNewPasswordChallenge('DemoPassword1!', userAttributes, { onSuccess: (data) => { console.log(data); }, onFailure: function (err) { alert(err); } }); }, onFailure: function (err) { alert(err); }, }); }Si alguien está interesado en configurar este proyecto de prueba desde cero, ejecute:
npm init -y npm i -D webpack webpack-cli npm i amazon-cognito-identity-jsen webpack.config.js:
var path = require('path'); module.exports = { entry: './src/app.js', mode: 'development', output: { path: path.resolve(__dirname, "dist"), filename: 'main.js', } }Cree un nuevo archivo en ./src/app.js donde agregue el código anterior de amazonCognitoIdentity con la referencia de información de AWS correcta y cree ./dist/index.html con:
... <body> <script src="main.js"></script> </body>en package.json agregue el script "reloj":
... "scripts": { "watch": "webpack --watch", }Finalmente ejecutarlo:
npm run watchy abra index.html directamente en el navegador con la consola de desarrollo también.
Esperemos que sea útil para alguien.
Escribí un artículo hace un par de años explicando cómo hacer esto.
El artículo habla de Amplify pero, como se mencionó en otra respuesta, es más un término general, en el artículo usamos principalmente componentes de interfaz de usuario proporcionados por el proyecto Amplify.
puede encontrarlo aquí: https://medium.com/@mim3dot/aws-amplify-cognito-part-2-ui-components-935876fabad3
Actualización 03 Dic 2021
Después de re:Invent 2021, "Amplify Admin UI" pasó a llamarse "Amplify Studio". Ahora con poderes extra:
===============
Respuesta Original
Para empezar, quiero aclarar que "Amplificar" es un término general para varias cosas. Tenemos:
Puede consultar la página de inicio para obtener más aclaraciones: https://docs.amplify.aws/
¿Existe una biblioteca de cliente liviana solo de Cognito para interactuar con el flujo de autenticación y autorización del servicio de Cognito?
Detrás de escena, Amplify utiliza la biblioteca amazon-cognito-identity-js para interactuar con Amazon Cognito. Puede instalarlo directamente a través npm install amazon-cognito-identity-js .
El código fuente se ha movido al repositorio de Amplify Libraries (por ejemplo, amplify-js) . Una vez más, forma parte del paraguas "Amplify" bajo la primera categoría "Amplify Libraries".
¿Hay alguna forma de usar el servicio Cognito sin las bibliotecas de Amplify?
Otro enfoque que puede hacer es usar Amazon Cognito como un servidor OAuth. Cuando crea un dominio de interfaz de usuario alojado de Amazon Cognito , le proporciona un servidor de autorización compatible con OAuth 2.0.
Puede crear su propia API/Backend para puntos finales de registro/inicio de sesión e intercambiar tokens/credenciales con el servidor OAuth de Amazon Cognito sin utilizar aws-sdk ni ninguna biblioteca de dependencia de terceros.
Escribí un ejemplo de tutorial, cómo configurar su grupo de usuarios, puntos finales con los que necesita hablar usando Node.js, puede encontrarlo aquí: https://github.com/oieduardorabelo/node-amazon-cognito-oauth
Puedes seguir la misma idea para cualquier otro idioma.