我想对集群的所有节点实施身份验证(客户端和服务器应提供用户名和密码才能加入集群)。我试图使用最新版本,该文档声称可以提供身份验证,但是并不能在所有节点上都实现。它仅用于新的瘦Java客户端。
第一个问题:我的理解正确吗,还是我缺少什么?
我还尝试使用GridSecurityProcessor接口实现所有节点的身份验证,作为自定义插件的一部分(通过遵循本指南http://smartkey.co.uk/development/securing-an-apache-ignite-cluster/和公共邮件列表上的其他讨论)。
我已将插件识别为服务器节点,但无法将SecurityCredentialsProvider的实现与Ignite关联;似乎Ignite没有使用它。问题类似于以下问题:http://apache-ignite-users.70518.x6.nabble.com/Custom-SecurityCredentialsProvider-and-SecurityCredentials-td16360.html。
因此,当调用GridSecurityProcessor.authenticateNode(ClusterNode节点,SecurityCredentials cred)时,cred为空。
第二个问题:如何将SecurityCredentialsProvider和SecurityCredentials挂钩到Ignite,以便它将使用这些凭据从我的插件中调用authorizeNode方法?
答案 0 :(得分:0)
我设法使用文档推荐的插件系统来实现身份验证。我按照以下步骤操作:
`
public CustomTcpDiscoverySpi(final SecurityCredentials securityCredentials) {
this.securityCredentials = securityCredentials;
this.setAuthenticator(this);
}
`
@Override
public void setNodeAttributes(final Map<String, Object> attrs, final IgniteProductVersion ver) {
attrs.put(IgniteNodeAttributes.ATTR_SECURITY_CREDENTIALS, this.securityCredentials);
super.setNodeAttributes(attrs, ver);
}
我还实现了authenticateNode方法,在该方法中,我将作为类的SecurityCredentials对象作为对authenticateNode方法的参数接收到。如果验证成功,则此方法返回SecurityContext的实现;否则,返回null。因此您需要根据需要实施它。例如,要授予未经授权的完全访问权限,只需为所有**** operationAllowed方法返回true,并在subject()方法中返回null。
在IgniteConfiguration中,将此类用作DiscoverySpi:cfg.setDiscoverySpi(customTcpDiscoverySpi);