Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在azure webapp中使用MSAL.js进行身份验证_Javascript_Msal - Fatal编程技术网

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

Javascript 在azure webapp中使用MSAL.js进行身份验证,javascript,msal,Javascript,Msal,我曾尝试将MSAL实现到我正在开发的Web应用程序中,但我遇到了一些问题,尤其是IE和Edge 第一个问题出现在chrome和IE/Edge中。登录后,我得到2个弹出窗口。在第二个弹出窗口结束之前,程序已经调用了Graph API并返回了数据,所以为什么会显示,我不知道。代码如下: function login(){ clientApplication = clientApplication || new Msal.UserAgentApplication({ClientId}, nul

我曾尝试将MSAL实现到我正在开发的Web应用程序中,但我遇到了一些问题,尤其是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,以保证它在IE中工作,但我仍然遇到一些奇怪的事情。如果我没有在IE中禁用受保护模式,两个弹出窗口都会打开,但第一个会重定向到https://{site}.azurewebsites.net/null。第二个弹出窗口重定向到大约:空白。两扇窗户都没有关闭,这是意料之中的

但是,如果我确实禁用了受保护模式,就像内部测试的MSAL.js文档中建议的那样,我会得到身份验证——弹出窗口不会自动关闭。对于多租户webapp来说,这显然不是一个可行的解决方案

我的身份验证流是否真的有问题,或者我只是遗漏了什么?在一个单页应用程序中运行MSAL.js身份验证是否有合适的文档

编辑:经过一些挖掘,我发现authflow也在用于进行静默调用的iframe中启动。是否有任何原因使整个页面也加载到所述iframe中?它运行dom就绪时运行的所有函数

似乎没有呼叫是静默的,但始终需要弹出窗口。

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

login.microsoftonline.com

从ADAL JS Git文档中得到提示:


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

您可能找到了有关此主题的更多信息吗?恐怕没有。我正在试图了解问题是否出在您的操作系统、浏览器、应用程序或库上。你能核实一下吗?1.尝试运行以下示例时是否存在相同的问题?2.您使用的是哪个版本的操作系统/浏览器?让我猜猜-您在页面加载期间自动调用MSAL,并且您注册的应用程序的重定向URI指向同一页面,对吗?OAuth端点需要发回id_令牌或access_令牌,这是通过将当前窗口的位置指向重定向URI来完成的。在您的情况下,在第一次登录后,弹出窗口会指向您的主页面,并且您的身份验证流会再次触发,因此会出现多个弹出窗口。您可以:1。为身份验证回调设置专用页面,并将应用重定向URI更新到该页面。UserAgentApplication还需要知道重定向URI—msal的当前NPM版本不支持它,但最新的Github版本支持它。2.修改页面以在回调期间停止触发身份验证流。由于存在多个回调场景,请尝试使用UserAgentApplication.IsCallback函数进行检查。总的来说,我发现MSAL不是很理想,尤其是弹出流。如果用户阻止弹出窗口,它就不起作用,当第三方cookie被禁用时,它也可能不起作用。这难道不是IE的唯一选项吗?我认为Edge没有设置可信站点的选项。