首页 > 解决方案 > 在 IgniteDB 中实现身份验证

问题描述

我刚刚在 IgniteDB 中配置了身份验证(特定服务器,而不是 localhost) https://apacheignite.readme.io/docs/advanced-security

但是我在尝试连接时遇到了一些问题。我应该在哪里提供凭证?

TcpDiscoverySpi spi = new TcpDiscoverySpi();
TcpDiscoveryVmIpFinder ipFinder = new TcpDiscoveryMulticastIpFinder();
String ipList = appConfig.getIgniteIPAddressList();
List<String> addressList= Arrays.asList(ipList.split(";"));
ipFinder.setAddresses(addressList);
spi.setIpFinder(ipFinder);
IgniteConfiguration cfg = new IgniteConfiguration();
cfg.setIgniteInstanceName("IgnitePod");
cfg.setClientMode(true);
cfg.setDiscoverySpi(spi);
Ignite ignite =  Ignition.start(cfg);

有人对实施它有想法吗?

标签: securityauthenticationignite

解决方案


Apache Ignite 的开源版本不提供此类安全功能。您可以自己实现它,也可以使用商业 Gridgain 发行版。

以下是实现自定义安全插件的步骤。

需要实现GridSecurityProcessor将用于对加入节点进行身份验证的方法。

GridSecurityProcessor中,您必须authenticateNode()按如下方式实现 api

public SecurityContext authenticateNode(ClusterNode node, SecurityCredentials cred) throws IgniteCheckedException {

        SecurityCredentials userSecurityCredentials;

        if (securityPluginConfiguration != null) {
            if ((userSecurityCredentials = securityPluginConfiguration.getSecurityCredentials()) != null) {
                return userSecurityCredentials.equals(cred) ? new SecurityContextImpl() : null;
            }
            if (cred == null && userSecurityCredentials == null) {
                return new SecurityContextImpl();
            }
        }

        if (cred == null)
            return new SecurityContextImpl();

        return null;

    }

此外,您需要在如下TcpDiscoverySpi期间扩展以传递用户凭据initLocalNode()

@Override
    protected void initLocalNode(int srvPort, boolean addExtAddrAttr) {
        try {
            super.initLocalNode(srvPort, addExtAddrAttr);
            this.setSecurityCredentials();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
private void setSecurityCredentials() {
        if (securityCredentials != null) {

            Map<String,Object> attributes = new HashMap<>(locNode.getAttributes());
            attributes.put(IgniteNodeAttributes.ATTR_SECURITY_CREDENTIALS, securityCredentials);
            this.locNode.setAttributes(attributes);
        }
    }

您可以按照下面给出的链接获取可以遵循的详细步骤来编写自定义安全插件及其用法。

https://www.bugdbug.com/post/how-to-secure-apache-ignite-cluster


推荐阅读