Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.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 使用chrome.identity.launchWebAuthFlow时,如何防止提前关闭弹出窗口?_Javascript_Google Chrome Extension_Oauth_Azure Active Directory - Fatal编程技术网

Javascript 使用chrome.identity.launchWebAuthFlow时,如何防止提前关闭弹出窗口?

Javascript 使用chrome.identity.launchWebAuthFlow时,如何防止提前关闭弹出窗口?,javascript,google-chrome-extension,oauth,azure-active-directory,Javascript,Google Chrome Extension,Oauth,Azure Active Directory,我正在调用chrome.identity.launchWebAuthFlow从我的chrome扩展的后台脚本 这用于通过获取隐式用户身份验证 登录弹出窗口显示良好,允许用户凭证输入。但是,提交凭据后,窗口不会重定向到我的回调重定向uri。相反,它会重定向到另一个不需要用户操作的页面(这是Microsoft Azure AD中的某种公司登录页面) 此时窗口关闭,我在launchWebAuthFlow回调函数中得到未定义的响应。同时,我收到控制台错误:未选中运行时。lastError:无法加载授权页

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

这用于通过获取隐式用户身份验证

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

此时窗口关闭,我在launchWebAuthFlow回调函数中得到未定义的响应。同时,我收到控制台错误:未选中运行时。lastError:无法加载授权页。

同样的流程在浏览器窗口中也可以正常工作:在提供凭据并重定向到corporate signin页面后,它最终被重定向到my redirect url(auth token就绪)

由此我得出结论,launchWebAuthFlow并没有等到重定向到我的重定向页面,而是过早地关闭了弹出窗口


有什么方法可以防止这种情况发生吗?

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

仍然不确定为什么启动WebAuthFlow会有这样的行为。但我决定另作决定

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

因此,我寻找了一种方法来缩短路线,并给第一个auth页面一个提示,说明下一步应该是哪个公司页面。为此,您必须向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调用,这是必需的

希望这将有助于类似情况的人


此处的更多详细信息:

此窗口将自动显示,它应该是一个受保护的窗口,不会通过任何扩展API公开,因此我认为您无法控制它。你所描述的在我看来像个虫子。无论是在Chrome的授权流中还是在站点中。试着报告一下。