security - 在 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);
有人对实施它有想法吗?
解决方案
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
推荐阅读
- sql-server - SISS - 将 DT_STR 转换为 DT_DECIMAL 的问题(小数转换为整数部件号)
- android - 带参数的 Firebase 自定义事件是否需要额外的时间/设置才能在调试视图中显示
- python - ModuleNotFound 即使它在那里
- python - 如何按字母顺序对字典的键进行排序
- python - 如何展平熊猫 DataFrameGroupBy
- node.js - 在 Angular 7 应用程序中重新加载操作后数据表未初始化
- mysql - Mysql 列计数与第 1 行的值计数不匹配,但列是正确的
- html - CSS 链接标签有效,但 @import 无效
- cplex - 表示我可以在模型的其他部分引用的决策变量公式
- sql - 使用日期维度的月度快照