Я работаю над проектом, в котором мне сначала нужно получить токен аутентификации с сервера.
Для этого мне нужно отправить GET-запрос на сервер авторизации с двумя парами ключ-значение, включенными в заголовок: 1 / идентификатор клиента (const) и 2 / вычисленное значение HMAC SHA1 на основе идентификатора клиентаотметка времени и так далее.
Это нормально работает с почтальоном.(Я вычисляю sha1 на онлайн-калькуляторе)
Задача 1: (сторона клиента cryptojs) В качестве приложения для узла я включил библиотеку cryptojs, и вычисления выполняются.Но даже с RequireJS я не могу заставить cryptojs работать в браузере.
Error: Module name "crypto-js" has not been loaded yet for context: _. Use require([])
Проблема 2: (cors)
Видимо, Chrome отказывается от соединения, так как сервер не принимает все входящие соединения,Добавление режима: «no-cors» в запросе на выборку не решает проблему.
Проблема 3: (заголовки)
Мне нужно добавить две пары ключ-значение в заголовки запроса get.В почтальоне это не проблема, но я не уверен, что это работает с добавлением или просто добавлением их в мои заголовки: {}
Я постоянно получаю сообщение об ошибке сервера, как будто нет добавленных заголовков.
Я уже пробовал REquireJS для решения проблемы cryptojs.
Я добавил заголовки в объект myHeaders
const myHeaders = new Headers();
myHeaders.append('ClientID', CLIENTID);
myHeaders.append('Clientsecret', hashedToken);
, а также только что добавил значения в:
headers: {
...
'ClientID': CLIENTID,
'Clientsecret': hashedToken,
}
Оба, похоже, не помогают.
Мой код:
function getToken(){
hashedToken = getHashedSecret(); //this won't work client side as cryptojs can not be loaded
const CLIENTID = "CLIENTID";
const AUTHURL = "https://authorization.server.com/api/CLIENTID/authorization/";
var TIMESTAMP = getTimeStamp();
const myHeaders = new Headers();
// myHeaders.append('Content-Type', 'application/json');
myHeaders.append('ClientID', CLIENTID);
myHeaders.append('Clientsecret', hashedToken);
console.log(myHeaders);
let response = fetch(AUTHURL+TIMESTAMP, {
method: 'GET',
headers: {
myHeaders,
'Accept': 'application/json',
'Content-Type': 'application/json',
'Origin': '',
'Host': 'authorization.server.com',
include: 'ClientID', CLIENTID
},
mode: 'no-cors',
})
.then(response => response.json())
.then(data => {
console.log(data);
document.getElementById('output').innerHTML = data;
})
.catch(error => console.error(error))
console.log('data');
return data;
}
Я должен получить токен с сервера