MSAL SSO: Как получить информацию об учетной записи для входа в родительское окно внутри дочернего iframe? - PullRequest
0 голосов
/ 10 марта 2020

Я использую MSAL JS для тихой аутентификации в моем iframe внутри любого веб-приложения (Yammer, Teams et c). Согласно документации и различным вопросам и ответам пользователей, нам нужно передать информацию об учетной записи (имя или сеанс) в метод acquTokenSilent. В противном случае он отклонит указание createUserLoginRequiredError.

Я попытался передать область приложения в качестве запроса, но он не мог аутентифицироваться без взаимодействия с пользователем и попадал в блок catch, так как у него нет loginHint для создания единого входа. Так, как получить этот loginhint, если я прошел аутентификацию в родительском окне. В ADAL мы можем сделать это, используя displaycall и заменив prompt = none. Как сделать подобное SSO в MSAL?

Я пробовал ниже код,

const requestObj = {
            scopes: [ Appresource ]
        };
 myUserAgentApplication.acquireTokenSilent( requestObj ).then( () => {

                // Success
            } )
                .catch( ( exception ) => {

                    // Failure
                    myUserAgentApplication.loginPopup( requestObj ).then( () => {

                        // Success after interaction.
                    } )
}

MSAL. js:

UserAgentApplication.prototype.acquireTokenSilent = function (userRequest) {
        var _this = this;
        // validate the request
        var request = RequestUtils_1.RequestUtils.validateRequest(userRequest, false, this.clientId);
        return new Promise(function (resolve, reject) {
            // block the request if made from the hidden iframe
            WindowUtils_1.WindowUtils.blockReloadInHiddenIframes();
            var scope = request.scopes.join(" ").toLowerCase();
            // if the developer passes an account, give that account the priority
            var account = request.account || _this.getAccount();
            // extract if there is an adalIdToken stashed in the cache
            var adalIdToken = _this.cacheStorage.getItem(Constants_1.Constants.adalIdToken);
            // if there is no account logged in and no login_hint/sid is passed in the request
            if (!account && !(request.sid || request.loginHint) && StringUtils_1.StringUtils.isEmpty(adalIdToken)) {
                _this.logger.info("User login is required");
                return reject(ClientAuthError_1.ClientAuthError.createUserLoginRequiredError());
            }
...............................
...............................
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...