Токен доступа в едином входе приложения React, размещенный на веб-ресурсе Dynamics 365 - PullRequest
0 голосов
/ 21 января 2019

У меня есть приложение Reactjs (так называемое одностраничное приложение), которое загружено в Dynamics 365 Customer Engagement (ранее CRM) в качестве веб-ресурса.Этот веб-ресурс или приложение отображается в виде IFRAME внутри формы объекта, и поэтому это небольшое приложение уже имеет прямой доступ к данным Dynamics 365 с помощью объекта Xrm.Все хорошо.

То, что я пытаюсь сделать с этим приложением, - это заставить его подключаться к SharePoint через Microsoft Graph API, загружать файлы и создавать папки.

Поскольку пользователь уже подписанв Dynamics 365 и Azure AD (я полагаю) нет необходимости отображать другой всплывающий экран входа в систему для пользователя.

В msal wiki есть 2 дополнительных параметра, которые можно передать в userAgentApplication, чтобы сообщить AAD, что пользователь уже выполнил вход, и это login_hint и domain_hint,Я передал эти два параметра, но ничего не происходит.Обратите внимание на фрагмент ниже, что я положил логи.В консоли регистрируются только componentWillMount, before и after.

Не уверен, что здесь не хватает.

componentWillMount() {
    console.log('componentWillMount');
    try {
        console.log('before');

        var userAgentApplication = new UserAgentApplication(applicationConfig.clientID, applicationConfig.authority, function (errorDesc, token, error, tokenType) {
            // Called after loginRedirect or acquireTokenPopup
            console.log('callback called');
        }, {cacheLocation: 'localStorage'});

        userAgentApplication.acquireTokenSilent(["user.read"], null, null, "&login_hint=first.last@mydomain.cp,&domain_hint=mydomain.com")
            .then(token => console.log('token', token))
            .catch((err) => console.log('err', err));

        userAgentApplication.acquireTokenSilent(["user.read"], "&login_hint=first.last@mydomain.cp,&domain_hint=mydomain.com")
            .then(token => console.log('token', token))
            .catch((err) => console.log('err', err));

        console.log('after');

    }
    catch (e) {
        console.log('caught error: ', e);
    }
}

1 Ответ

0 голосов
/ 22 января 2019

Проведя 3 дня, я отвечу на свой вопрос.

Я нашел 2 проблемы:

  • Мне нужно позвонить userAgentApplication.loginPopup и передать user.name@domain.com на login_hint в extraParameters, затем позвонить acquireTokenSilent. UserAgentApplication проверит, существует ли существующая авторизация.
  • Вторая проблема заключается в том, что acquireTokenSilent вообще не выполняется. Ни успехов, ни неудач, и в github есть открытый вопрос.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...