Я пытаюсь реализовать поток неявного предоставления OAuth с помощью AWS Cognito.В частности, после входа на мой веб-сайт я пытаюсь выполнить запрос GET к конечной точке Cognito AUTHORIZATION ;ответ на этот запрос должен перенаправить меня на выбранный мной URL-адрес - назовем его URL-адрес обратного вызова - и предоставить нужный токен доступа во фрагменте.
Если я сделаю этот запрос, войдя в адресную строку браузерасоответствующий URL-адрес для конечной точки AUTHORIZATION, все происходит, как и ожидалось: браузер перенаправляется на URL-адрес обратного вызова, и фрагмент фрагмента доступа появляется во фрагменте этого URL-адреса.
Однако, если я выполняю этот же запрос асинхронно изСценарий на моем веб-сайте, использующий XMLHttpRequest, не позволяет получить доступ к фрагменту, возвращенному в URL-адресе обратного вызова (и вкладка сети Chrome показывает, что фрагмент, содержащий токен, фактически возвращается, как в сценарии адресной строки, описанном выше).Как я могу получить доступ к этому фрагменту?
Мой код выглядит следующим образом:
let xhr = new XMLHttpRequest();
let method = options.method.toUpperCase();
let extractFrom = ['url', 'code'];
xhr.open(options.method, options.url, true);
xhr.withCredentials = true;
for (const key in options.headers) {
xhr.setRequestHeader(key, options.headers[key]);
}
xhr.onreadystatechange = function () {
const status = this.status;
const respUrl = this.responseURL;
const respHeaders = this.getAllResponseHeaders();
const respBody = this.response;
if (this.readyState === XMLHttpRequest.DONE) {
if (status === 200) {
let val = extractParameter(extractFrom[0], respUrl, extractFrom[1]);
resolve(val);
} else {
console.error('Other Response Text: ' + this.statusText);
reject(this.statusText);
}
}
};
xhr.onerror = function () {
console.error('Error: ' + xhr.statusText);
reject(this.statusText);
};
xhr.send(null);