Нет заголовка "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.

Я бы посоветовал вам позвонить в службу на вашем сервере, которая затем отправит запрос с сервера на сервер.

Другие вопросы по тегам