【问题标题】:Authenticating using MSAL.js in azure webapp在 azure webapp 中使用 MSAL.js 进行身份验证
【发布时间】:2017-10-30 17:45:12
【问题描述】:

我尝试在我正在开发的 web 应用中实现 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 以使其在 IE 中工作,但我仍然遇到一些奇怪的事情。如果我没有在 IE 中禁用保护模式,两个弹出窗口都会打开,但第一个会重定向到 https://{site}.azurewebsites.net/null 。第二个弹出窗口重定向到 about:blank。正如预期的那样,两个窗口都没有关闭。

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

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

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

看起来好像没有呼叫是静音的,但总是需要一个弹出窗口..

【问题讨论】:

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

标签: javascript msal


【解决方案1】:

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

login.microsoftonline.com

从 ADAL JS Git 文档获得提示:https://github.com/AzureAD/azure-activedirectory-library-for-js#trusted-site-settings-in-ie

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

【讨论】:

  • 这不是IE的唯一选择吗?我认为 Edge 没有设置受信任站点的选项。
猜你喜欢
  • 1970-01-01
  • 2018-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-18
  • 2013-03-31
  • 1970-01-01
相关资源
最近更新 更多