在 Excel 加载项中,我要求用户使用 Office 帮助程序库针对 Azure AD 应用程序对自己进行身份验证。加载项启动时,我调用 Authenticator 实例的“身份验证”功能,它打开登录对话框并完成登录过程没有问题,问题是当重定向返回令牌时,身份验证器没有从 Href 检索信息并关闭对话框,而不是卡在空白页面窗口中。
我正在使用版本:来自 CDN 的 Office Helpers 1.0.2
这是代码:
/// register Azure AD 1.0 endpoint using
authenticator.endpoints.registerAzureADAuth(clientId, tenant, {
responseType: 'token',
redirectUrl: window.location.origin + "/Home.html",
resource: resourceId
});
// First Login
authenticator
.authenticate(OfficeHelpers.DefaultEndpoints.AzureAD)
.then(function (row_token) {
// Azure Token
var token = new AccessToken(row_token.access_token, row_token.expires_at, row_token.expires_in, row_token.provider, row_token.session_state, row_token.state, row_token.token_type);
var decoded_token = jwt_decode(row_token.access_token)
client_email = decoded_token.upn;
Office.context.document.settings.set("client_email", decoded_token.upn);
access_token = row_token.access_token;
Office.context.document.settings.set("access_token", row_token.access_token);
expires_at = row_token.expires_at;
Office.context.document.settings.set("expires_at", expires_at);
Office.context.document.settings.saveAsync();
var expires_in = row_token.expires_at - new Date() - 5000; // 5000 is five seconds before the token expires.
setTimeout(function () {
authenticator.tokens.delete(OfficeHelpers.DefaultEndpoints.AzureAD);
authennticateUser();
}, expires_in); // recall the current function when the token expires
active_session = true;
})
.catch(errorHandler);
}
该问题发生在 Office 的最新更新(截至 18/08/2019)之后,微软似乎正式放弃 IE 并考虑使用 Edge,在 IE 上没有问题并且身份验证工作完美,但现在在 Edge 上,如前所述,它失败了。