在azure webapp中使用MSAL.js进行身份验证

时间:2017-05-30 09:56:31

标签: javascript msal

我尝试将MSAL应用到我正在开发的网络应用程序中,但我遇到了一些问题,尤其是IE和Edge。

第一个问题是chrome和IE / Edge。登录后我得到2个弹出窗口。在第二个弹出结束之前,程序已经调用了Graph 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中完美运行。如果我遗漏任何这些,我将不会被认证。

现在,第二部分是一个但问题更多。我已将polyfill包含在promises中,以使其在IE中运行,但我仍然遇到了一些奇怪的事情。如果我没有在IE中禁用保护模式,则两个弹出窗口都会打开,但第一个弹出窗口会重定向到https:// {site} .azurewebsites.net / null。第二个弹出窗口重定向到about:blank。没有窗户关闭,正如预期的那样。

但是,如果我按照内部测试的MSAL.js文档中的建议禁用保护模式,我会进行身份验证 - 弹出窗口不会自动关闭。对于多租户webapp来说,这显然不是一个可行的解决方案。

我的身份验证流程有什么问题,或者我只是遗漏了什么?有没有关于在单页应用程序中使用MSAL.js运行身份验证的体面文档?

编辑:经过一番挖掘后,我发现authflow也是在用于进行静默调用的iframe中启动的。有没有理由在iframe中加载整个页面?它运行我在dom准备就绪时运行的所有函数。

看起来似乎没有呼叫是静音的,但总是需要一个弹出窗口。

1 个答案:

答案 0 :(得分:0)

在"可信站点"中添加以下网址在"安全"内部"互联网选项"解决了这个问题

<强> login.microsoftonline.com

得到了ADAL JS Git doc的提示:https://github.com/AzureAD/azure-activedirectory-library-for-js#trusted-site-settings-in-ie

当然需要在每台用户的机器上完成。由于它是我们的内部网站,我们已要求我们的IT部门添加策略以在所有用户的计算机上推送此特定设置。