首页 文章

Apache Ignite 2.5的身份验证

提问于
浏览
0

我想为集群的所有节点实现身份验证(客户端和服务器应该提供用户名和密码来加入集群) . 我试图使用文档声称提供身份验证的最新版本,但它没有为所有节点实现它;它只适用于新的瘦客户端 .

First question :我的理解是正确的,还是我错过了什么?

我还尝试使用GridSecurityProcessor接口实现所有节点的身份验证,作为自定义插件的一部分(通过遵循本指南http://smartkey.co.uk/development/securing-an-apache-ignite-cluster/以及公共邮件列表上的其他讨论) .

我得到了服务器节点识别的插件,但我可以_1071302使用它 . 问题类似于这个问题:http://apache-ignite-users.70518.x6.nabble.com/Custom-SecurityCredentialsProvider-and-SecurityCredentials-td16360.html .

因此,当调用GridSecurityProcessor.authenticateNode(ClusterNode节点,SecurityCredentials cred)时,cred为null .

Second question :如何将SecurityCredentialsProvider和SecurityCredentials挂钩到Ignite,以便它将使用这些凭据从我的插件调用authorizeNode方法?

1 回答

  • 0

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

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

    `

    public CustomTcpDiscoverySpi(final SecurityCredentials securityCredentials) {
        this.securityCredentials = securityCredentials;
        this.setAuthenticator(this);
      }
    
    • 在此类中,我从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);
      }
    
    • 我还实现了authenticateNode方法,我在其中检查了此类的SecurityCredentials对象,并将其作为authenticateNode方法的参数接收 . 如果验证成功,此方法返回SecurityContext的实现,否则返回null;所以你需要随意实现它 . 例如,要在没有授权的情况下提供完全访问权限,只需对所有**** operationAllowed方法返回true,并在subject()方法中返回null .

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

相关问题