《Apache Zookeeper 官方文档》ZooKeeper可插入式身份认证

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
简介:

ZooKeeper运行在带有数量众多并且各不相同的身份认证schemes(视图)的各种不同环境中,所以它拥有完整的可插入式身份验证框架。甚至它内置的身份验证schemes也使用了可插入式身份验证框架。

想搞清楚身份验证框架式是如何工作的,你首先必须弄明白两个主要的身份验证操作。该框架首先必须验证客户端(client)。这一步通常都会被完成只要客户端连接到服务器并且它包含了从服务器发送过来或收集到相关的关于客户端与连接进行关联的验证信息。第二步由框架处理的操作时找出一个对客户端进行响应的ACL中的entries(我翻译成“标识”)。ACL entries是一对<idspec, permissions>对。Idspec可能是一个匹配关联连接的验证信息的简单字符串(simple string)或者它也可能是一个用来评估该验证信息的表达式(expression)、它关注于实现身份验证插件的匹配。这里是身份验证插件中必须被实现的接口:


public interface AuthenticationProvider {
String getScheme();
KeeperException.Code handleAuthentication(ServerCnxn cnxn, byte authData[]);
boolean isValid(String id);
boolean matches(String id, String aclExpr);
boolean isAuthenticated();
}

第一个方法“getScheme”返回一个验证插件的字符串。因为我们支持多样化身份验证的方法,而一个身份验证凭证或一个idspec通常会带有scheme,所以ZooKeeper服务器通过身份验证插件返回的scheme去确定是哪一个ids被scheme应用了。
一个客户端发送身份验证信息去跟连接进行关联,(这一步骤)通常被称为“处理身份验证”(handleAuthentication)。客户端将shceme指定给那些响应信息。ZooKeeper服务器将该信息传递给那些getScheme与客户端传递过来的scheme相匹配的身份验证插件。如果handleAuthentication的实现(implementation)确定该信息是坏的它通常都会返回一个错误,然后它会使用cnxn.getAuthInfo().add(new Id(getScheme(), data))方法与连接关联信息。
身份验证插件在设置和使用ACLs(的情况)中都被调用了。当一个ACL因为znode而被创建时,ZooKeeper服务器将会传递部分标识(entry)的id给isValid(String id)方法。它被插件用来验证id是否拥有一个正确的form(找不到合适译意)。举个例子,IP:172.16.0.0/16是一个非法id,但ip:host.com却是合法的。如果一个新的ACL包含了一个“auth”标识,那么“isAuthenticated”会被使用来判断这个与连接相关联的scheme的身份验证信息是否应该被加到ACL里。一些schemes不应该被包含在auth里。比如,如果auth被(用户)指定了那么客户端的IP地址不会被视为一个应该被加入到ACL里的id。

在检查一个ACL的时候ZooKeeper会调用matches(String id, String aclExpr)方法。它需要匹配对应的含有相关ACL标识的客户端它的身份验证信息。为了找出那些被应用到客户端的标识,ZooKeeper服务器将会找出每一个标识的scheme,同时,如果有一个来自对应scheme的客户端验证信息,matches(String id, String aclExpr)方法会在使用了提前被添加到handleAuthentication连接的验证信息的id和用于ACL标识id的aclExpr这两个参数后被调用。身份验证插件里含有两个内置对象:iP和digest。通过使用系统properties可以添加额外插件。启动的时候ZooKeeper服务器会查找以“zookeeper.authProvider”开头的系统properties并且解析那些properties里面的值,比如一个身份验证插件的类名。通过使用“Dzookeeper.authProvider.X=com.f.MyAuth”可以建立那些properties,或者你可以像下面一样在服务器配置文件里添加标识:

authProvider.1=com.f.MyAuth
authProvider.2=com.f.MyAuth2

应该注意的是我们要确保property的后缀是独一无二的。如果有相同的比如:
Dzookeeper.authProvider.x=com.f.MyAuthDzookeeper.authProvider.x=com.f.MyAuth2,那么只有其中一个会被使用。另外所有的服务器必须拥有相同的被定义插件,否则使用了插件提供的身份验证schemes的客户端们将会在连接到某些服务器时发生很多问题。

转载自 并发编程网 - ifeve.com

相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
3月前
|
数据采集 分布式计算 Kubernetes
Apache Flink 实践问题之ZooKeeper 网络瞬断时如何解决
Apache Flink 实践问题之ZooKeeper 网络瞬断时如何解决
82 4
|
3月前
|
分布式计算 监控 Hadoop
详解 Apache ZooKeeper 和 Apache Oozie
【8月更文挑战第31天】
85 0
|
6月前
|
Java API Apache
ZooKeeper【基础 03】Java 客户端 Apache Curator 基础 API 使用举例(含源代码)
【4月更文挑战第11天】ZooKeeper【基础 03】Java 客户端 Apache Curator 基础 API 使用举例(含源代码)
71 11
|
6月前
|
存储 Java 网络安全
ZooKeeper【搭建 03】apache-zookeeper-3.6.0 伪集群版(一台服务器实现三个节点的ZooKeeper集群)
【4月更文挑战第10天】ZooKeeper【搭建 03】apache-zookeeper-3.6.0 伪集群版(一台服务器实现三个节点的ZooKeeper集群)
77 1
|
6月前
|
存储 Java 网络安全
ZooKeeper【搭建 02】apache-zookeeper-3.6.0 集群版(准备+安装配置+启动验证)
【4月更文挑战第8天】ZooKeeper【搭建 02】apache-zookeeper-3.6.0 集群版(准备+安装配置+启动验证)
84 1
|
6月前
|
存储 Linux 数据库
ZooKeeper【搭建 01】apache-zookeeper-3.6.2 单机版安装+配置+添加到service服务+开机启动配置+验证+chkconfig配置(一篇入门zookeeper)
【4月更文挑战第8天】ZooKeeper【搭建 01】apache-zookeeper-3.6.2 单机版安装+配置+添加到service服务+开机启动配置+验证+chkconfig配置(一篇入门zookeeper)
190 0
|
3月前
|
存储 消息中间件 Java
Apache Flink 实践问题之原生TM UI日志问题如何解决
Apache Flink 实践问题之原生TM UI日志问题如何解决
44 1
|
17天前
|
SQL Java API
Apache Flink 2.0-preview released
Apache Flink 社区正积极筹备 Flink 2.0 的发布,这是自 Flink 1.0 发布以来的首个重大更新。Flink 2.0 将引入多项激动人心的功能和改进,包括存算分离状态管理、物化表、批作业自适应执行等,同时也包含了一些不兼容的变更。目前提供的预览版旨在让用户提前尝试新功能并收集反馈,但不建议在生产环境中使用。
465 13
Apache Flink 2.0-preview released
|
22天前
|
存储 缓存 算法
分布式锁服务深度解析:以Apache Flink的Checkpointing机制为例
【10月更文挑战第7天】在分布式系统中,多个进程或节点可能需要同时访问和操作共享资源。为了确保数据的一致性和系统的稳定性,我们需要一种机制来协调这些进程或节点的访问,避免并发冲突和竞态条件。分布式锁服务正是为此而生的一种解决方案。它通过在网络环境中实现锁机制,确保同一时间只有一个进程或节点能够访问和操作共享资源。
53 3
|
2月前
|
SQL 消息中间件 关系型数据库
Apache Doris Flink Connector 24.0.0 版本正式发布
该版本新增了对 Flink 1.20 的支持,并支持通过 Arrow Flight SQL 高速读取 Doris 中数据。

推荐镜像

更多