【问题标题】:Authentication for Apache Ignite 2.5Apache Ignite 2.5 的身份验证
【发布时间】:2018-07-10 09:19:26
【问题描述】:

我想对集群的所有节点实施身份验证(客户端和服务器应提供用户名和密码才能加入集群)。我尝试使用文档声称提供身份验证的最新版本,但它并没有为所有节点实现它;它仅适用于新的瘦 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 node, SecurityCredentials cred) 时, cred 为空。

第二个问题:如何将 SecurityCredentialsProvider 和 SecurityCredentials 连接到 Ignite,以便它使用这些凭据从我的插件中调用 authorizeNode 方法?

【问题讨论】:

  • 您是否考虑过使用 SSL + 签名证书进行服务器-服务器对等身份验证?
  • 用户列表上似乎有第二个问题的答案:apache-ignite-users.70518.x6.nabble.com/…
  • @alamar 感谢您的回复。我不想使用 ssl,即使我想要,它也不能解决身份验证问题,它只是提供加密通信。所以不是Ignite节点认证的解决方案。
  • 当然 SSL 提供身份验证,这是使用 SSL 的主要原因。通常情况下,TLS 连接的两端会相互验证。
  • @alamar,我不明白你在说什么。正如我所说,我不需要 ssl,但我想明白你的意思。您能否提供有关如何在具有多个 ignite 节点(客户端和服务器)的场景中使用 ssl 实现节点身份验证的更多信息?谢谢。

标签: ignite


【解决方案1】:

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

  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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-23
    • 2017-06-28
    • 2012-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多