我尝试将MSAL实施到我正在开发的WebApp中,但是我遇到了一些问题,尤其是在IE和Edge中。
第一个问题均在Chrome和IE/Edge中。登录时,我有2个弹出窗口。在第二个弹出窗口结束之前,该程序已经调用了图API并返回数据,所以我不知道它为何显示。代码如下:
function login(){
clientApplication = clientApplication || new Msal.UserAgentApplication({ClientId}, null, function (errorDes, token, error, tokenType) {});
clientApplication.loginPopup(["user.read files.readwrite.all group.readwrite.all"]).then(function (token) {
getAccessToken();
}, function (error) {
// handle error
});
}
function getAccessToken() {
clientApplication.acquireTokenSilent(["user.read files.readwrite.all group.readwrite.all"]).then(function (token) {
//Call Graph API and do stuff.
});
}
除了显示2个弹出窗口之外,这在Chrome中也非常有效。如果我遗漏了任何内容,我将无法进行身份验证。
现在,第二部分是一个有问题的。我包括了保证在IE中起作用的保证的多填充,但我仍然遇到一些奇怪的东西。如果我在IE中不禁用受保护模式,则两个弹出窗口都打开,但第一个将重定向到https://{site} .azurewebsites.net/null。第二个弹出窗口重定向到:空白。
都没有关闭窗口。但是,如果我确实禁用了受保护的模式,如MSAL.JS文档中的建议,我确实会经过身份验证 - 弹出窗口不会自动关闭。对于多租户WebApp而言,这显然不是一个可行的解决方案。
我的身份验证流确实有问题,还是我只是错过了什么?在一个页面中,是否有使用MSAL.JS运行身份验证的不错的文档?
编辑:经过一些挖掘,我发现验证流也开始于用于进行无声调用的iframe中。是否有任何理由整个页面也加载在上述iframe中?它运行我在DOM准备就绪时运行的所有功能。
看起来好像没有呼叫是无声的,但总是需要一个弹出窗口。
在"互联网选项"中的"安全性"下的"信任站点"中添加下面的URL解决了问题
login.microsoftonline.com
获得了Adal JS Git Doc的提示:https://github.com/azuread/azure-activeirctory-library-for-js#trusted-site-site-site-site-settings-in-ie
当然,它需要在每个用户的计算机上进行。由于它是我们的内部网站,我们已要求我们的IT部门添加政策,以在所有用户的机器上推动此特定设置。