I've submitted a PR for the server-side implementation of authenticator negotiation:
    https://github.com/apache/cassandra/pull/4773

Happy for any feedback but there are a couple areas where I'm personally less confident:

* How to identify authenticators in the protocol. I'm torn between using the current approach of passing the full server-side authenticator class name to the client and expecting the client to understand it, or using the more abstract authentication mode identifiers.

* Handling anonymous (unauthenticated) clients. The upshot is that if you're allowing anonymous clients today (i.e., using AllowAll or similar authentication), and want to use authn negotiation to help upgrade to some form of actual authentication, you will need to first ensure your 'anonymous' role is explicitly granted necessary permissions. With no authentication, 'anonymous' acts essentially as super-user; with negotiation and any authenticator that requires authentication, 'anonymous' cannot escalate privileges to super-user.

* Testing: I tried to provide decent unit and dtest coverage but am happy for further suggestions.

I'm going to add an addendum to the CEP regarding a couple implementation details that diverged, and add operational notes as well.

Thanks -- Joel.

On 7/24/2025 10:55 AM, Joel Shepherd wrote:
Binding: 11 +1, no -1
Non-binding: 1 +1, no -1

I think the vote to adopt CEP-50 can be considered as passed. I'll update the CEP, move the related JIRA back to open state (if possible; if not I'll cut a new one) and move ahead on it.

In the spirit of minimizing surprise, I plan on approaching this in several phases/patches, along the lines of:

1) Refactoring existing code to move logic with hardcoded references to specific authenticators (e.g., PasswordAuthenticator) behind DatabaseDescriptor APIs.

2) Refactoring to associate ClientState with the specific authenticator used by the client.

3) Configuration support for negotiation and related logic changes in DatabaseDescriptor and AuthConfig.

4) Integration w/SUPPORTED and STARTUP messages and handlers, and Java driver reference implementation.

As always, guidance, suggestions and feedback welcome. Thanks for your support of this proposal!

-- Joel.


On 7/21/2025 8:51 AM, Joel Shepherd wrote:
Hi dev@ - I'd like to request voting for adoption of CEP-50: Authentication Negotiation.

Proposal: https://cwiki.apache.org/confluence/display/CASSANDRA/CEP-50%3A+Authentication+Negotiation Discussion: https://lists.apache.org/thread/cdx4fttq72j4dz7cyhxp14pt7k6rd6bc

Feedback has been incorporated in the proposal, or (I believe) closed out in the discussion thread.

The vote will be open for 72 hours. A vote passes if there are at least 3 binding +1s and no binding vetoes.

Thanks! -- Joel.

Reply via email to