首页 文章

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

提问于
浏览
3

我已经尝试将MSAL实现到我正在开发的webapp中,但我遇到了一些问题,尤其是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:// .azurewebsites.net / null . 第二个弹出窗口重定向到about:blank . 正如预期的那样,两个窗户都没有关闭 .

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

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

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

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

1 回答

  • 0

    在“Internet选项”中的“安全”下的“可信站点”中添加以下URL解决了该问题

    login.microsoftonline.com

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

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

相关问题