使用 chrome.identity.launchWebAuthFlow 时如何防止提前关闭弹出窗口?
How can I prevent early popup closing when using chrome.identity.launchWebAuthFlow?
我正在从我的 Chrome 分机的后台脚本调用 chrome.identity.launchWebAuthFlow。
这用于通过 https://login.microsoftonline.com
获取隐式用户身份验证
登录弹出窗口显示正常,允许用户输入凭据。但是,提交凭据后,window 不会重定向到我的回调重定向 uri。相反,它会重定向到另一个不需要用户操作的页面(这是 Microsoft Azure AD 中的某种公司登录页面)。
此时 window 关闭,我在 launchWebAuthFlow 回调函数中得到 undefined 响应。同时我收到控制台错误:未选中runtime.lastError:无法加载授权页面。
相同的流程在浏览器中工作正常window:在提供凭据并重定向到公司登录页面后,它最终被重定向到我的重定向url(已准备好身份验证令牌)。
由此我得出结论,launchWebAuthFlow 并没有等到重定向到我的重定向页面,而是过早地关闭了弹出窗口。
有什么办法可以避免这种情况吗?
我在这上面花了太多时间,但找到了解决方法。
仍然不确定为什么 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
我正在从我的 Chrome 分机的后台脚本调用 chrome.identity.launchWebAuthFlow。
这用于通过 https://login.microsoftonline.com
获取隐式用户身份验证登录弹出窗口显示正常,允许用户输入凭据。但是,提交凭据后,window 不会重定向到我的回调重定向 uri。相反,它会重定向到另一个不需要用户操作的页面(这是 Microsoft Azure AD 中的某种公司登录页面)。
此时 window 关闭,我在 launchWebAuthFlow 回调函数中得到 undefined 响应。同时我收到控制台错误:未选中runtime.lastError:无法加载授权页面。
相同的流程在浏览器中工作正常window:在提供凭据并重定向到公司登录页面后,它最终被重定向到我的重定向url(已准备好身份验证令牌)。
由此我得出结论,launchWebAuthFlow 并没有等到重定向到我的重定向页面,而是过早地关闭了弹出窗口。
有什么办法可以避免这种情况吗?
我在这上面花了太多时间,但找到了解决方法。
仍然不确定为什么 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