Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

OAuth Principal Builder breaks Kerberos listeners #208

Open
akaczano opened this issue Oct 17, 2023 · 0 comments
Open

OAuth Principal Builder breaks Kerberos listeners #208

akaczano opened this issue Oct 17, 2023 · 0 comments

Comments

@akaczano
Copy link
Contributor

akaczano commented Oct 17, 2023

I recently attempted to add an Oauth listener to an existing Kafka broker that uses Kerberos for authentication. The result was that all communication to the broker immediately started failing with the following error:

[2023-10-17 19:51:41,330] ERROR Exception while processing request from 10.XXX.XXX.XX:9094-10.XXX.XXX.XXX:52800-0 (kafka.network.Processor)
java.lang.NullPointerException
	at org.apache.kafka.common.security.authenticator.DefaultKafkaPrincipalBuilder.applyKerberosShortNamer(DefaultKafkaPrincipalBuilder.java:146)
	at org.apache.kafka.common.security.authenticator.DefaultKafkaPrincipalBuilder.build(DefaultKafkaPrincipalBuilder.java:135)
	at io.strimzi.kafka.oauth.server.OAuthKafkaPrincipalBuilder.build(OAuthKafkaPrincipalBuilder.java:166)
	at org.apache.kafka.common.security.authenticator.SaslServerAuthenticator.principal(SaslServerAuthenticator.java:314)
	at org.apache.kafka.common.network.KafkaChannel.principal(KafkaChannel.java:162)
	at kafka.network.Processor.$anonfun$processCompletedReceives$1(SocketServer.scala:1026)
	at java.base/java.util.LinkedHashMap$LinkedValues.forEach(LinkedHashMap.java:608)
	at kafka.network.Processor.processCompletedReceives(SocketServer.scala:1008)
	at kafka.network.Processor.run(SocketServer.scala:893)
	at java.base/java.lang.Thread.run(Thread.java:829)

My analysis of the problem is as follows:

The principal builder extends the DefaultKafkaPrincipalBuilder but it just passes nulls to the two objects, SslPrincipalMapper and KerberosShortNamer in the super class constructor. For the first object, some reflection is used to initialize it anyway, but this is not done for the KerberosShortNamer. The result is that, if this principal builder is used on a broker that has a listener configured for Kerberos authentication, a null pointer exception is thrown here whenever a client tries to authenticate. Since my goal is to add an Oauth listener in-place to an existing Kafka cluster and then begin migrating clients from Kerberos to Oauth, this is a huge problem. As far as I know, there is no way to configure a principal builder for a single listener.

I have a PR out (#207) with a small change that fixes the problem for me.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant