我正在建立一个为不同团队服务的selenium网格(3.1.0)。在将网格URL发布给团队之前,我想制定一些安全措施,如下所示
网格连接应该要求身份验证才能将节点注册到集线器。 (以避免外部注册)
此外,到达网格所需的身份验证(凭据必须通过功能传递)。
目前,infra是
Hub:Linux RHEL7 节点:windows 10 硒:3.1.0
请帮助我提出一些想法。
仅供参考:我试图重建硒项目,我认为这是一项复杂的尝试,需要大量的时间投入,任何开源解决方案都是可以理解的。
由于
答案 0 :(得分:1)
据我所知,那里什么都没有,这会让你这么做。话虽这么说,你可以自己建立。
实现您的第一个要求,即
网格连接应该要求身份验证才能注册 节点到集线器。 (避免外部注册)
以下是你如何做到的(为了方便起见,我复制了关于来自here的另一个问题的答案)
Registrable
)org.openqa.grid.selenium.proxy.DefaultRemoteProxy
的内容(我喜欢将此方法称为CLASSPATH覆盖,但我确定这是一个更优雅的名称),这样新的类也是名为DefaultRemoteProxy
,它位于同一个包org.openqa.grid.selenium.proxy
中,但位于您的测试项目中。以下是Registrable
的样子
public interface Registrable {}
以下是DefaultRemoteProxy
的修改构造函数的外观:
public DefaultRemoteProxy(RegistrationRequest request, Registry registry) {
super(request, registry);
if (!(this instanceof Registrable)) {
throw new UnsupportedOperationException("Cannot proceed further");
}
pollingInterval = config.nodePolling != null ? config.nodePolling : DEFAULT_POLLING_INTERVAL;
unregisterDelay = config.unregisterIfStillDownAfter != null ? config.unregisterIfStillDownAfter : DEFAULT_UNREGISTER_DELAY;
downPollingLimit = config.downPollingLimit != null ? config.downPollingLimit : DEFAULT_DOWN_POLLING_LIMIT;
}
现在,您可以调整自定义代理,使其实现Registrable
接口。因此,任何尝试使用DefaultRemoteProxy
注册其节点的人都会不断失败,因为DefaultRemoteProxy
没有实现Registrable
接口。这基本上可以防止人们在没有此自定义代理实现的情况下尝试向您的集线器注册其节点。
达到你的第二个要求,即
还需要进行身份验证才能到达网格(凭据必须是 通过能力)。
您可以按照以下方式执行此操作:
DesiredCapabilities
实例时,您的用户需要向RemoteWebDriver
添加一些自定义键。这些自定义键实际上可以是用户可以传入的用户名/密码组合。org.openqa.grid.internal.BaseRemoteProxy#hasCapability
并在其中,您可以检查传入的requestedCapability
以检查它是否具有密钥(凭据)并验证它们(可能针对数据库或您选择的其他数据源),如果它没有,那么您将使用此方法返回false
。如果密钥存在且有效,则您将匹配的功能委派给super.hasCapability()
。 这样,如果传入的功能没有您正在寻找的身份验证机制,网格将拒绝新的会话请求,说它不匹配网格的功能。
这应该适合你。
答案 1 :(得分:0)
您始终可以将API网关放在栈的前面,例如Apigee