Apache Ignite 2.5的身份验证

时间:2018-07-10 09:19:27

标签: ignite

我想对集群的所有节点实施身份验证(客户端和服务器应提供用户名和密码才能加入集群)。我试图使用最新版本,该文档声称可以提供身份验证,但是并不能在所有节点上都实现。它仅用于新的瘦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方法?

1 个答案:

答案 0 :(得分:0)

我设法使用文档推荐的插件系统来实现身份验证。我按照以下步骤操作:

  1. 创建了一个扩展TcpDiscoverySpi的类,并实现了DiscoverySpiNodeAuthenticator。在其中,我将SecurityCredentials对象作为构造函数参数传递。

`

  public CustomTcpDiscoverySpi(final SecurityCredentials securityCredentials) {
    this.securityCredentials = securityCredentials;
    this.setAuthenticator(this);
  }
  1. 在此类中,我重写TcpDiscoverySpi中的setNodeAttributes以添加securityCredentials对象,如下所示:

`

  @Override
  public void setNodeAttributes(final Map<String, Object> attrs, final IgniteProductVersion ver) {
    attrs.put(IgniteNodeAttributes.ATTR_SECURITY_CREDENTIALS, this.securityCredentials);
    super.setNodeAttributes(attrs, ver);
  }
  1. 我还实现了authenticateNode方法,在该方法中,我将作为类的SecurityCredentials对象作为对authenticateNode方法的参数接收到。如果验证成功,则此方法返回SecurityContext的实现;否则,返回null。因此您需要根据需要实施它。例如,要授予未经授权的完全访问权限,只需为所有**** operationAllowed方法返回true,并在subject()方法中返回null。

  2. 在IgniteConfiguration中,将此类用作DiscoverySpi:cfg.setDiscoverySpi(customTcpDiscoverySpi);