【问题标题】:How can I prevent early popup closing when using chrome.identity.launchWebAuthFlow?使用 chrome.identity.launchWebAuthFlow 时如何防止提前关闭弹出窗口?
【发布时间】:2020-06-29 21:58:06
【问题描述】:

我正在从我的 Chrome 扩展程序的后台脚本调用 chrome.identity.launchWebAuthFlow

这用于通过https://login.microsoftonline.com 获取隐式用户身份验证

登录弹出窗口看起来很好,允许用户输入凭据。但是,提交凭据后,窗口不会重定向到我的回调重定向 uri。相反,它会重定向到另一个不需要用户操作的页面(这是 Microsoft Azure AD 中的某种公司登录页面)。

此时窗口关闭,我在 launchWebAuthFlow 回调函数中收到 undefined 响应。同时我得到控制台错误:Unchecked runtime.lastError: Authorization page could not be loaded.

同样的流程在浏览器窗口中运行良好:在提供凭据并重定向到公司登录页面后,它最终被重定向到我的重定向 URL(已准备好身份验证令牌)。

由此我得出结论,launchWebAuthFlow 不会等到重定向完成到我的重定向页面,而是过早关闭弹出窗口。

有没有办法防止这种情况发生?

【问题讨论】:

  • 这个窗口是自动显示的,它应该是一个受保护的窗口,不会通过任何扩展 API 公开,所以我认为你无法控制它。你所描述的对我来说似乎是一个错误。在 Chrome 的身份验证流程或站点中。尝试在crbug.com 上报告。

标签: javascript google-chrome-extension oauth azure-active-directory


【解决方案1】:

我在这方面花了太多时间,但找到了解决方法。

仍然不确定为什么 launchWebAuthFlow 会这样。但我决定以其他方式解决。

之所以会发生这种双重重定向,是因为 Microsoft 身份验证页面首先需要输入纯电子邮件地址。这允许它决定重定向到哪个公司身份验证页面。即使它重用当前会话(cookie)也会发生这种情况。

所以我寻找一种方法来缩短路线并为第一个身份验证页面提供一个提示关于下一步应该去的公司页面。为此,您必须向 launchWebAuthFlow 使用的 url 添加一个参数:

https://login.microsoftonline.com/{tenant}/oauth2/v2.0/authorize
?client_id={client-id}
&response_type=token
&login_hint=user@domain.com
&prompt=login
&redirect_uri={redirect-uri}
&scope={some-scope}

请注意,我还必须添加 prompt=login。它在没有浏览器的情况下也可以工作(实际上使用活动会话甚至更快)。但是,如果从 chrome.identity.launchWebAuthFlow

调用,则需要这样做

希望这会对处于类似情况的人有所帮助。

更多详情:Microsoft identity platform and Implicit grant flow

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-16
    • 2015-07-17
    • 1970-01-01
    • 2018-05-24
    • 2012-08-28
    相关资源
    最近更新 更多