Используя msal.js, пользователи Safari (Desktop / iOS) должны войти в систему дважды - PullRequest
0 голосов
/ 09 января 2019

Я использую azure b2c и msal.js в своем веб-приложении для обработки аутентификации в моем веб-приложении.

Когда пользователь нажимает кнопку входа, я вызываю API входа в библиотеку msal.js с необходимыми областями действия.

function login() {
    clientApplication.loginRedirect(applicationConfig.b2cScopes);
}

Это работает как ожидалось. Тем не менее, когда пользователь пытается создать API, мой код вызывает маркер захвата без вывода сообщений msal.js, который в Safari не выполняется каждый раз. Я считаю, что это связано с политикой безопасности iFrame в Safari. Когда я отключаю «запретить межсайтовое отслеживание» в Safari, все работает нормально.

function callApiWithToken(url, type, body) {
    return clientApplication.acquireTokenSilent(applicationConfig.b2cScopes).then(function (accessToken) {
        return callApiWithAccessToken(url, type, accessToken, body);
    }, function (error) {
        clientApplication.acquireTokenPopup(applicationConfig.b2cScopes).then(function (accessToken) {
            return callApiWithAccessToken(url, type, accessToken, body);
        }, function (error) {
            throw "Error acquiring the access token to call the Web api:" + error;
        });
    })
}

Приведенный выше код пытается получить токен молча, но не может, а затем вызывает acquTokenPopup, который работает, но перенаправляет пользователя для повторного входа в систему.

Есть ли способ обойти пользователя дважды? Из того, что я понимаю, входящий вызов возвращает только токен ID, который не подходит для выполнения вызовов API, так как я должен использовать токен доступа.

Вот веб-приложение, если оно помогает: ссылка

1 Ответ

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

Существует решение , задокументированное группой безопасности и некоторыми другими пользователями, столкнувшимися с той же проблемой.

Установите для navigateToLoginRequestUrl значение false в объекте параметров при создании экземпляра UserAgentApplication:

msalClientApplication = new Msal.UserAgentApplication(clientID, authority, () => {}, {
    navigateToLoginRequestUrl: false
})
...