Как проанализировать токен JWT после входа пользователя в AWS Cognito

#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

    }
  });