O AWS Cognito possui uma interface simples e poderosa que nos permite criar pool de usuários com facilidade e uma API rica para autenticar usuários e gerenciar este pool e suas integrações configurações. Mas o Cognito também fornece uma interface web padrão para autenticação, dispensando o esforço de desenvolvimento de uma página de login.

É possível customizar cores e logo e a URL de redirecionamento em caso de sucesso. Isto permite a utilização deste login em qualquer aplicação web que necessite da autenticação do Cognito.
O exemplo abaixo demonstra como montar a URL de autenticação:
GET https://mydomain.auth.us-east-1.amazoncognito.com/login?
response_type=code&
client_id=ad398u21ijw3s9w3939&
redirect_uri=https://YOUR_APP/redirect_uri&
state=STATE&
scope=openid+profile+aws.cognito.signin.user.admin
Os parâmetros de dominio, app name, client_id e escopo podem ser obtidos na console do Cognito, exemplo:

A opção UI customization permite ajustar o logo e alguns parâmetros de CSS.
Utilizando a API diretamente
Uma outra opção, para quem necessita criar uma página de login customizada, ou mesmo um login para aplicações mobile é utilizar a API do Cognito. Cabe lembrar que uma vez o usuário criado na base do Cognito ele deve modificar a senha cadastrada inicialmente. O código abaixo demonstra como realizar o login no Cognito utilizando a API.
var config = require('./config.json');
var AWS = require('aws-sdk');
var AWSCognito = require('amazon-cognito-identity-js-node');
AWS.CognitoIdentityServiceProvider.AuthenticationDetails = AWSCognito.AuthenticationDetails;
AWS.CognitoIdentityServiceProvider.CognitoUserPool = AWSCognito.CognitoUserPool;
AWS.CognitoIdentityServiceProvider.CognitoUser = AWSCognito.CognitoUser;
function handler (event, context, cb)
{
// Se o ClientId recebido pela função for diferente do ClientID criado para a APP, retornar 403
if (event.clientId != YOUR_CLIENTEID) {
cb(403);
return;
}
var authenticationData = {
Username : 'username',
Password : 'password'
};
authenticationData.Username = YOUR_USERNAME;
authenticationData.Password = event.action == "CHANGE" ? event.newPassword : YOUR_USER_PASSWORD;
var authenticationDetails = new AWS.CognitoIdentityServiceProvider.AuthenticationDetails(authenticationData);
var poolData = {
UserPoolId : '...', // Your user pool id here
ClientId : '...' // Your client id here
};
var userPool = new AWS.CognitoIdentityServiceProvider.CognitoUserPool(poolData);
var userData = {
Username : 'username',
Pool : userPool
};
userData.Username = YOUR_USERNAME;
var cognitoUser = new AWS.CognitoIdentityServiceProvider.CognitoUser(userData);
cognitoUser.authenticateUser(authenticationDetails, {
onSuccess: function (result) {
console.log('access token ' + result.getAccessToken().getJwtToken());
var key = 'cognito-idp.us-east-1.amazonaws.com/' + YOUR_USER_POOL_ID;
AWS.config.credentials = new AWS.CognitoIdentityCredentials({
IdentityPoolId : YOUR_USER_POOL_ID, // your identity pool id here
Logins : {
// Change the key below according to the specific region your user pool is in.
[key]: result.getIdToken().getJwtToken()
}
});
console.log("cognitoUser: " + JSON.stringify(cognitoUser));
console.log("Config : " + JSON.stringify(AWS.config));
console.log("Credentials: " + JSON.stringify(AWS.config.credentials));
cb(null, {
accessToken: result.getAccessToken().getJwtToken(),
idToken: result.getIdToken().getJwtToken()
});
},
onFailure: function(err) {
console.log(JSON.stringify(err));
cb(err);
},
newPasswordRequired: function(userAttributes, requiredAttributes) {
event.action = "TEST";
cognitoUser.completeNewPasswordChallenge(event.newPassword, {}, this);
}
});
};
exports.handler = handlerResumo
Para mais informações sobre o uso do Cognito para gestão de pool de usuários e autenticação visite a página da AWS https://docs.aws.amazon.com/cognito/latest/developerguide/login-endpoint.html