我已根据this documentation.为客户端和代理以及内部代理之间的所有通信启用了SSL身份验证
为了使用ACL进行授权,在文档中已经提到使用SSL身份验证时的默认主体名称,默认SSL用户名的格式为CN=writeuser,OU=Unknown,O=Unknown,L=Unknown,ST=Unknown,C=Unknown
,要修改它,我们需要设置{{1 }}。
我想获得有关如何实现新PrincipalBuilderClass的帮助,并使用该类提供SSL用户名principal.builder.class=CustomizedPrincipalBuilderClass
。显示上述示例实现的任何文章也有效。
在此先感谢您的帮助!
答案 0 :(得分:0)
对于自定义 PrincipalBuilder,您需要实现 KafkaPrincipalBuilder
类。在该类中,您需要实现 build
方法,该方法基本上返回一个 KafkaPrincipal
实例。
对于示例实现,您可以按照以下步骤操作:https://github.com/kafka-security/oauth/blob/master/kafka-oauth/src/main/java/com/bfm/kafka/security/oauthbearer/CustomPrincipalBuilder.java
我正在复制代码的摘录,以防将来被删除/移动,
public class CustomPrincipalBuilder implements KafkaPrincipalBuilder {
@Override
public CustomPrincipal build(AuthenticationContext authenticationContext) throws KafkaException{
try {
CustomPrincipal customPrincipal;
if (authenticationContext instanceof SaslAuthenticationContext) {
SaslAuthenticationContext context = (SaslAuthenticationContext) authenticationContext;
OAuthBearerTokenJwt token = (OAuthBearerTokenJwt) context.server()
.getNegotiatedProperty("OAUTHBEARER.token");
customPrincipal = new CustomPrincipal("User", token.principalName());
customPrincipal.setOauthBearerTokenJwt(token);
return customPrincipal;
} else {
throw new KafkaException("Failed to build CustomPrincipal. SaslAuthenticationContext is required.");
}
} catch (Exception ex) {
throw new KafkaException("Failed to build CustomPrincipal due to: ", ex);
}
}
}
上述示例使用 SASL OAUTHBEARER
进行身份验证/授权。但是您可以使用任何您想要的机制。