Нет заголовка "Access-Control-Allow-Origin" с Microsoft Online Auth
Я пытаюсь сделать простой запрос на получение токена доступа с помощью конечной точки OAuth-графика Microsoft. Когда я отправляю простой запрос ниже, я получаю
В запрошенном ресурсе отсутствует заголовок "Access-Control-Allow-Origin". Поэтому происхождение 'localhost:8080/myapprunninglocally' не разрешено.**"
var xhttp = new XMLHttpRequest();
xhttp.open("GET", "https://login.microsoftonline.com/common/oauth2/authorize?client_id=<client_id>&scope=wl.signin%20wl.calendars_update&response_type=token&redirect_uri=localhost:8080/myapprunninglocally", true);
xhttp.send();
Я также зарегистрировал это приложение с помощью Microsoft Azure Directory, запросил ВСЕ разрешения и использовал делегированные client_id
,
Я ознакомился с CORS и знаю Политики кросс-происхождения, однако знаю, что есть API, которые предоставляют конечные точки, включающие 'Access-Control-Allow-Origin'
в их заголовках ответа. Кто-нибудь может помочь?
2 ответа
Чтобы интегрировать AAD в javascript, мы предлагаем вам использовать https://github.com/AzureAD/azure-activedirectory-library-for-js, которая является библиотекой в javascript для внешнего интерфейса, чтобы легко интегрировать AAD.
Есть два варианта, на которые мы должны обратить внимание, прежде чем использовать ADAL для JS:
- Согласно узлу на https://github.com/OfficeDev/O365-jQuery-CORS:
Примечание. Этот образец не будет работать в Internet Explorer. Пожалуйста, используйте другой браузер, например, Google Chrome. ADAL.js использует iframe для получения токенов API CORS для ресурсов, отличных от собственного бэкэнда SPA. Эти запросы iframe требуют доступа к файлам cookie браузера для проверки подлинности с помощью Azure Active Directory. К сожалению, куки не доступны для Internet Explorer, когда приложение работает на localhost.
- Включить
oauth2AllowImplicitFlow
вашего приложения Azure AD. Обратитесь к https://crmdynamicsblog.wordpress.com/2016/03/17/response-type-token-is-not-enabled-for-the-application-2/ для подробных шагов.
Вот пример кода для получения токена доступа от Microsoft Graph:
<script src="https://secure.aadcdn.microsoftonline-p.com/lib/1.0.14/js/adal.min.js"></script>
<body>
<a href="#" onclick="login();">login</a>
<a href="#" onclick="getToken()">access token</a>
</body>
<script type="text/javascript">
var configOptions = {
tenant: "<tenant_id>", // Optional by default, it sends common
clientId: "<client_id>",
postLogoutRedirectUri: window.location.origin,
}
window.authContext = new AuthenticationContext(configOptions);
var isCallback = authContext.isCallback(window.location.hash);
authContext.handleWindowCallback();
function getToken(){
authContext.acquireToken("https://graph.microsoft.com",function(error, token){
console.log(error);
console.log(token);
})
}
function login(){
authContext.login();
}
</script>
Вы не сможете запустить это от клиента. Часть настройки CORS требует, чтобы microsoftonline.com добавил ваш домен в свой белый список поддерживаемых CORS.
Я бы посоветовал вам позвонить в службу на вашем сервере, которая затем отправит запрос с сервера на сервер.