如何通过Native Messaging API将传递用户凭据传递给chrome

时间:2017-12-04 08:49:00

标签: javascript selenium authentication google-chrome-extension automation

这是一个非常具体的问题......但是如果您从不属于Active Directory的计算机上使用Selenium等,并且您被浏览器弹出窗口挫败,我为您提供解决方案。

我将解释问题并链接到一些资源(以及我的其他问题,其中包含更多链接),这些信息通知了解决方案,然后我将发布的更改发布到扩展I&#的示例中34;写"

问题:

您通过硒或类似的东西进行自动化或测试...并且auth弹出窗口突然出现!但是这个弹出窗口不是JavaScript,你不需要在你正在测试的机器上保存任何凭据。

如何将身份验证凭据传递给浏览器并阻止弹出窗口发生...但不使用密钥库,浏览器存储或 ghasp 文件?

一旦您知道如何传递数据,那么如何以允许免提认证的方式将值传入浏览器?

1 个答案:

答案 0 :(得分:0)

解决方案:

您需要使用浏览器扩展程序。 我的解决方案是针对铬构建的,但对于Firefox和可能边缘,它应该几乎没有变化。

首先,您需要为您的浏览器提供2个API:

虽然两个浏览器API非常相似,但它们确实存在一些显着差异 - 例如Chrome的实施缺少Promises

如果您将Native Messaging Host设置为发送格式正确的JSON字符串,则只需轮询一次。这意味着您可以使用runtime.sendNativeMessage()一次通话,并确保您的凭据可以使用。双关语。

下一步,我们需要了解我们应该如何处理webRequest.onAuthRequired事件。

由于我在Chromium工作,我需要使用无承诺的Chrome API。

chrome.webRequest.onAuthRequired.addListener(
  callbackFunctionHere,
  {urls:[targetUrls]},
  ['asyncBlocking'] // --> this line is important, too. Very.

变更:

我正在调用我的函数provideCredentials,因为我是一个盗窃者并使用this来源的示例。寻找异步版本。

示例代码从storage.local ...

获取凭据
chrome.storage.local.get(null, gotCredentials);

我们不希望这样。不。

我们希望通过一次调用sendNativeMessage获取凭据,以便我们更改这一行。

chrome.runtime.sendNativeMessage(hostName, { text: "Ready" }, gotCredentials);

这就是全部。认真。只要你的主人玩得好,这就是最大的秘密。我甚至不会告诉你我需要多长时间才能找到它!

链接:

我的问题与有用的链接:

  • Here - 针对Active Directory进行身份验证的解决方法
  • Here - 还有一些功能NM主机的工作代码
  • Here - 承诺的一些启发性材料