Невозможно получить azure OAuth2 токен с javascript для O365 Comm-Services - PullRequest
0 голосов
/ 19 марта 2020


У меня проблема, и надеюсь, что вы, ребята, можете мне помочь.
Я хочу создать небольшую страницу для моих коллег, чтобы они могли проверять новейшую информацию на административном портале O365.
Для этого я хочу использовать «API служебных коммуникаций Office 365» (https://manage.office.com/api/v1.0/contoso.com/ServiceComms/Messages)

Я уже зарегистрировал приложение в своей azure -адре, поэтому уже могу получать информацию через Почтальон или Powershell (Invoke-Rest). Но у меня есть проблема, чтобы получить его с JavaScript. С нормальными вариантами отдыха я всегда получаю ошибку CORS. Вот почему я подумал, что я попробую это с библиотекой MSAL. js.
Но я не могу заставить его работать. Может быть, мой Код неправильный?!
И я был немного смущен, потому что в официальных документах говорится, что я должен деактивировать CORS в моем браузере ?! (https://github.com/AzureAD/microsoft-authentication-library-for-js/tree/dev/lib/msal-browser -> при предварительных условиях)

Это не может быть так сложно ... надеюсь, вы можете помочь мне.
Вот мой код:

<!DOCTYPE html>
<script type="text/javascript" src="https://alcdn.msauth.net/lib/1.2.0/js/msal.js"></script>
<script type="text/javascript" src="https://alcdn.msauth.net/lib/1.2.0/js/msal.min.js"></script>

<html lang="en">
<script type="text/javascript">
var Demo;

    const msalConfig = {
        auth: {
            clientId: '2076e785-XXXX-XXXX-XXXX-XXXXXXXXXX'
        }
    };

    const msalInstance = new Msal.UserAgentApplication(msalConfig);

    msalInstance.handleRedirectCallback((error, response) => {
        // handle redirect response or error
    });

    var loginRequest = {
        scopes: ["user.read", "mail.send"] // optional Array<string>
    };

    msalInstance.loginPopup(loginRequest)
        .then(response => {
            // handle response
        })
        .catch(err => {
            // handle error
        });
    // if the user is already logged in you can acquire a token
    if (msalInstance.getAccount()) {
        var tokenRequest = {
            scopes: ["user.read", "mail.send"]
        };
        msalInstance.acquireTokenSilent(tokenRequest)
            .then(response => {

            })
            .catch(err => {
                // could also check if err instance of InteractionRequiredAuthError if you can import the class.
                if (err.name === "InteractionRequiredAuthError") {
                    return msalInstance.acquireTokenPopup(tokenRequest)
                        .then(response => {
                            // get access token from response
                            // response.accessToken
                        })
                        .catch(err => {
                            // handle error
                        });
                }
            });
    } else {
        // user is not logged in, you will need to log them in to acquire a token
    }

    var headers = new Headers();
    var bearer = "Bearer " + Demo;

    var options = {
         method: "GET",
         headers: headers
    };
    var graphEndpoint = "https://manage.office.com/api/v1.0/contoso.onmicrosoft.com/ServiceComms/Messages";

    fetch(graphEndpoint, options)
        .then(resp => {
             //do something with response
        });
</script>
</html>

1 Ответ

0 голосов
/ 27 марта 2020

Насколько я знаю, мы можем просто использовать sdk msal.js, чтобы запросить azure токен доступа к рекламе без проблемы с корсами. Но когда мы сделаем запрос на выборку https://manage.office.com в клиентском приложении (одностраничное приложение), мы встретимся с ошибкой cors. Потому что запрос междоменный. Относительно того, как это исправить, обратитесь к https://medium.com/@dtkatz / 3-way-to-fix-the-cors-error-and-how-access-control-allow-origin-works-d97d55946d9 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...