我在我的网络应用程序上使用 azure b2c 和 msal.js 来处理我的网络应用程序上的身份验证。
当用户单击登录时,我正在使用所需范围调用 msal.js 库中的登录 api。
function login() {
clientApplication.loginRedirect(applicationConfig.b2cScopes);
}
这按预期工作。但是,当用户尝试创建 API 时,我的代码调用 msal.js 的获取令牌静默 api,这在 Safari 中每次都会失败。我相信这是由于 Safari 中的 iFrame 安全策略。当我在 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;
});
})
}
上面的代码尝试以静默方式获取令牌失败,然后调用acquireTokenPopup,它可以工作,但会首先将用户重定向到再次登录。
有没有办法要求用户登录两次?据我了解,登录调用仅返回一个 ID 令牌,这不适合进行 api 调用,因为我应该使用访问令牌。
如果有帮助,这是网络应用程序:link