在Azure WebApp中使用msal.js进行认证



我尝试将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部门添加政策,以在所有用户的机器上推动此特定设置。