Я использую 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, так как я должен использовать токен доступа.
Вот веб-приложение, если оно помогает: ссылка