当前位置: 首页 > 面试题库 >

Python和Selenium的变通办法:针对Active Directory进行身份验证

华飞驰
2023-03-14
问题内容

我正在使用Python(2.7)和Selenium(3.4.3)通过geckodriver(0.19.0)驱动Firefox(52.2.0
ESR),以在CentOS 7计算机上自动执行进程。
我需要通过传递用户凭据来完全自动化的自动化操作。没有存储空间,也没有中断。
这是由一个事实引起的,这是因为该过程所需的内部网站位于Active
Directory域内,而运行自动化的计算机却不在该域内。我无需验证用户,只需将凭据传递到网站即可,无需人工干预,也无需该人成为计算机上的本地用户。

我尝试了以下各种排列:

  • [协议]:// [用户,密码] @ [网址]
  • driver.switch_to_alert()+ send_keys

看来其中一些只能在IE上使用,而我却无法访问。
我已经检查了图书馆来处理这个问题,但都无济于事。

我可以向python添加库,并且可以对机器进行sudo访问-无法进行身份验证,因此无法进行AD集成。

如何为该AD网站提供任意用户的凭据,以便无需本地存储其凭据,也不需要用户交互?

谢谢

编辑

我认为像代理这样的东西可以对用户进行身份验证,然后保留对selenium的身份验证来完成其工作…是否有可用的简单LDAP / AD代理?

编辑2

也许这很简单,我想传递用户凭证并阻止身份验证弹出窗口。


问题答案:

我需要使用浏览器扩展。我的解决方案是针对铬制成的,但对于Firefox甚至 可能是 edge,它的端口应几乎保持不变。

首先 ,您需要2个API可供浏览器使用:

  • webRequest.onAuthRequired- 谷歌和火狐
  • runtime.nativeMessaging- 谷歌和火狐

虽然两种浏览器API都非常相似,但它们确实有一些显着差异-
例如Chrome的实现缺少Promises。

如果将本机消息传递主机设置为发送格式正确的JSON字符串,则只需轮询一次即可。这意味着您可以使用一次调用,runtime.sendNativeMessage()并确保您的凭据是可解析的。双关语意。

接下来 ,我们需要查看如何处理webRequest.onAuthRequired事件。

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

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

改变:

provideCredentials之所以称呼我的函数,是因为我是个大偷窃者,并使用了此示例中的示例。寻找异步版本。

该示例代码从storage.local… 获取凭据。

chrome.storage.local.get(null, gotCredentials);

我们不想要那个。不。

我们希望通过一次调用获得凭据,sendNativeMessage因此我们将更改这一行。

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

这就是全部。说真的 只要主持人表现出色,这就是大秘密。我什至不告诉你我花了多长时间找到它!

因此,事实证明这是一个不小的问题。

我还没有实现该解决方案,但是我知道如何到达那里。

将值传递给扩展程序是第一步-可以在Chrome和Firefox中完成。观察版本,以确保所需的API
nativeMessaging实际上存在于您的版本中。因此,我不得不改用铬。

或者,可以使用存储API首先将值放入浏览器存储。[编辑:出于安全考虑,我没有采取这种方式]

接下来是使用webRequest API中的onAuthRequired事件。在事件上设置侦听器,然后传递所需的值。

注意事项: 我已经为nativeMessaging
API解决方案构建了直到扩展本身的所有内容,但是让脚本识别数据仍然存在问题。几乎可以肯定,这是我的JavaScript技能与使这些API变得不可思议的奥秘知识发生冲突……我尚未尝试使用存储方法,因为它的安全性较差(在我看来),但它似乎更简单。



 类似资料:
  • 问题内容: 在(带有)中,我尝试使用以下语句通过基本身份验证访问我的网页: 但是Google Chrome浏览器在控制台中向我发出以下警告: [弃用]其URL包含嵌入式凭据(例如https://user:pass@host/)的子资源请求被阻止。有关更多详细信息,请参见https://www.chromestatus.com/feature/5669008342777856。 在标记的链接中提到该

  • 问题内容: 如何使用Python + LDAP针对AD进行身份验证。我目前正在使用python-ldap库,它所产生的只是眼泪。 我什至不能绑定执行简单的查询: 运行此命令会给我两个错误之一: -输入错误或故意使用错误的凭据时,它无法通过身份验证。 ldap.INVALID_CREDENTIALS:{‘info’:‘80090308:LdapErr:DSID-0C090334,评论:AcceptS

  • 问题内容: 在(带有)中,我尝试使用以下语句通过基本身份验证访问我的网页: 但是Google Chrome浏览器在控制台中向我发出以下警告: [弃用]其URL包含嵌入式凭据(例如)的子资源请求被阻止。 在标记的链接中提到该支持已被删除: 在子资源请求中放弃对嵌入式凭据的支持。(已删除) 我现在的问题是,是否有另一种方法可以从Selenium进行基本身份验证? 问题答案: 对此进行了一些更新 : 在

  • 问题内容: 我想为在Raspberry Pi上运行并像本地服务器一样工作的软件制作一些更新脚本。该服务器应连接到Web上的主服务器,以获取软件更新并验证软件的许可证。为此,我设置了两个python脚本。我希望它们通过TLS套接字连接。然后,客户端检查服务器证书,然后服务器检查它是否是授权的客户端之一。我在此页面上找到了解决方案。 现在还有一个问题。我想知道 哪个客户端 (取决于证书)正在建立连接。

  • 目前用户名总是匿名的。设置调用方主体的正确方法是什么?我在拦截器里做这个吗?还是在豆子本身?我的目标是基本上能够调用一个方法loginUserWithEJBOnJboss(String user,String pass),该方法使用在jboss中配置的登录方法并正确设置主体。 我在这里不知所措,谷歌什么也没找到。也许我只是在寻找错误的单词。

  • 我有一个Spring MVC应用程序(使用3.0.5版本),需要使用Spring LDAP绑定到Active Directory,以便简单且仅验证用户的凭据。该应用程序托管在Linux服务器上,因此我需要一个跨平台的解决方案。并且应用程序不使用Spring Security性。 在此设置中实现用户身份验证的有效方法是什么?Active Directory支持FastBind控件(id=