#amazon-web-services #amazon-cognito
Вопрос:
Я уже развернул статический веб — сайт с использованием AWS S3 и использую AWS cognito для обработки входа пользователя. Веб-сайт является https://www.tianboqing.com
На HTML — странице есть кнопка,когда пользователь нажимает на кнопку,URL-адрес перенаправляется на URL-адрес входа в cognito.
‘https://tianboqing.auth.us-east-1.amazoncognito.com/login? client_id=4fgb77l991egfiubejfqep3e6eamp;response_type=tokenamp;scope=aws.cognito.signin.user.adminamp;redirect_uri=https://www.tianboqing.com’;
const handleClick = (event) => {
window.location.href =
'https://tianboqing.auth.us-east-1.amazoncognito.com/login?...
};
document.querySelector('button').addEventListener('click', handleClick);
Когда пользователь войдет в систему,Cognito вернет новый URL-адрес, подобный этому:
https://www.tianboqing.com/#access_token=eyJraWQiOiJrNFdXeWpRZXZiSlwvN3JNRUlVMzFHS0p4YmtBZHpXMExwN0xMT0tiS1BHRT0iLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiI2ZmNiNTZhOS1kNDhmLTQyYzItYWUyMi1hMzk0NTllNzc5ZDIiLCJ0b2tlbl91c2UiOiJhY2Nlc3MiLCJzY29wZSI6ImF3cy5jb2duaXRvLnNpZ25pbi51c2VyLmFkbWluIiwiYXV0aF90aW1lIjoxNjM1MzAyMDIxLCJpc3MiOiJodHRwczpcL1wvY29nbml0by1pZHAudXMtZWFzdC0xLmFtYXpvbmF3cy5jb21cL3VzLWVhc3QtMV9Zcm9BY0h5R20iLCJleHAiOjE2MzUzMDU2MjEsImlhdCI6MTYzNTMwMjAyMSwidmVyc2lvbiI6MiwianRpIjoiM2EyMjg0YjItNGM2MS00ZDcyLTk4NGYtNzIzNTExMDc3YmZlIiwiY2xpZW50X2lkIjoiNGZnYjc3bDk5MWVnZml1YmVqZnFlcDNlNmUiLCJ1c2VybmFtZSI6IjZmY2I1NmE5LWQ0OGYtNDJjMi1hZTIyLWEzOTQ1OWU3NzlkMiJ9.xKToMEhhSCqSy9ip0ikmdezY9XRz0GIlIdESSThEuLabWL4rFTw1XRQi4Z9OeDLZcmHyemZt0A1o1OvqZLFyrEHLmRAoyg5SIGD2Ic6tExS1PAmmX8Fe3uF7f851DtKMeapxsaNYyaLE3v-_vkJkDwRvUNoz8nOMUCYB3JKJxGPBlMz1yfn-3CXejepKLYeYYDOUaCPmyErfCy84_eQ-ZoEZFd3bH4vZXDNJKFj6W5_C4IZHuIAJveep3dYVq9cLWy3m8BWOAKWVxk6jTt1w0xI5og5jJiEIPn8Ok10WL1s4eEzAN04AYj6e05uzw4Ka_ip4y7VCdnndnTuWAx_5wQamp;expires_in=3600amp;token_type=Bearer
Которые содержат ключ доступа для анализа.
Мой вопрос в том,как код может узнать, что возвращается новый URL-адрес, содержащий access_token. Мне нужен передний маршрут или асинхронное ожидание или что-то в этом роде?
const handleClick = (event) => {
window.location.href =
'https://tianboqing.auth.us-east-1.amazoncognito.com/login?client_id=...';
};
Как получить токен пользователя, чтобы я мог использовать его для публикации в dynamodb?
Ответ №1:
Я предлагаю использовать API Gateway, где вы можете добавить авторизатор Cognito для каждого API, который вы развертываете для взаимодействия с DynamoDB.
Вот официальная документация, с которой вы можете ознакомиться, чтобы настроить свой API-шлюз с помощью Cognito, который вы хотите использовать для сохранения записей в DynamoDB.
Вы можете захватить этот маркер доступа со страницы возврата Cognito и сохранить его в качестве хранилища сеансов в интерфейсе с помощью JavaScript.
window.sessionStorage.setItem("accessToken", YourAccessToken);
Используйте указанный выше сохраненный accessToken в качестве заголовка авторизации при вызове этого API через AJAX.
var tok = window.sessionStorage.getItem("accessToken")
var xhr = new XMLHttpRequest();
xhr.open("POST", "URL");
xhr.setRequestHeader("Authorization", tok);
xhr.send();
Вместо перенаправления URL-адресов вы можете использовать AWS-Cognito javascript SDK и использовать Javascript (через AJAX) для авторизации пользователя.
var cognitoUser = new AmazonCognitoIdentity.CognitoUser({
Username: username,
Pool: userPool
});
var authenticationData = new AmazonCognitoIdentity.AuthenticationDetails({
Username: username,
Password: password
});
cognitoUser.authenticateUser(authenticationData, {
onSuccess: function (result) {
// your code here on success
},
onFailure: function (err) {
// your code here if error occurs
}
});