Я использовал Javascript для обновления токена Azure, но теперь он выдает ошибку:
No 'Access-Control-Allow-Origin' header is present on the requested resource.
Поэтому я хочу использовать вместо этого CURL (PHP).
Вот Javascript:
var form_data = {
"client_id": "**",
"grant_type": "refresh_token",
"resource": "https://analysis.windows.net/powerbi/api",
"username": "****************",
"password": "*****************",
"scope": "openid",
"client_secret": "**",
"refresh_token": "**"
};
var options = {
method: "post",
headers: {
"Content-Type": "application/x-www-form-urlencoded"
},
body: form_data
}
return fetch("https://login.microsoftonline.com/common/oauth2/token", options)
.then((response) => {
if (response.ok) {
return response.json();
} else {
throw new Error("Server response wasn't OK");
}
})
.then((json) => {
return json.token;
});
CURL:
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,"https://login.microsoftonline.com/common/oauth2/token");
curl_setopt($ch, CURLOPT_POST, 1);
$client_id = "**";
$client_secret = "**";
curl_setopt($ch, CURLOPT_POSTFIELDS, );
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$server_output = curl_exec ($ch);
Каким должен быть полный запрос CURL?
Возможно, вы столкнулись с проблемой CORS, поскольку вы выбрали путь PHP, тогда есть библиотека, похожая на версию javascript, которая называется Жрать. Вы можете попробовать это.
@GregSchmidt, пробовал: var options = { method: "post", headers: { "Content-Type": "application/x-www-form-urlencoded", "Origin": "http://localhost" }, body: formData }
Но по-прежнему возникают те же ошибки: `POST login.microsoftonline.com/common/oauth2/token 400 (Bad Request) Failed to load login.microsoftonline.com/common/oauth2/token: Нет заголовка Access-Control-Allow-Origin на запрошенном ресурсе. Следовательно, к источнику 'localhost' доступ не разрешен. Ответ имел код состояния HTTP 400. Если непрозрачный ответ соответствует вашим потребностям, установите режим запроса на «no-cors», чтобы получить ресурс с отключенным CORS. ajax.html: 1 Uncaught (в обещании) TypeError: Failed to fetch`
У меня нет личного опыта работы с CORS, поэтому я не знаю, подойдет ли localhost для использования там. В сообщении об ошибке упоминается вариант непрозрачного ответа, возможно, это сработает для вас?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы пробовали просто включить заголовок
Originв свой запрос JavaScript в соответствии с требованиями CORS? Это может быть так же просто, как добавить"Origin": "http://your.site.xyz"в определениеheaders. Вот страница с дополнительной информацией.