Thanks Andy - My hope/expectation is this would significantly reduce the amount of friction involved when either implementing or migrating to a new authenticator. I suspect it will benefit more complex environments too, when a single authenticator isn't ideal for all clients.

At this point, the stickiest bits I've run into have involved logic that switches on "the" authenticator class, because of the hardcoded dependency on a specific authn implementation, and working out how to sanely extend the logic once it's possible for a single node to be using different authenticators for different client sessions. Solvable but will take some refactoring and might also generate debate about what the right behaviors are in that scenario. An example is the RoleManager which currently creates additional role attributes if the Password Authenticator is in use ... which, now that you mention it, I wonder if that's already broken for the MutualTlsWithPasswordFallbackAuthenticator. Hmm.

Anyway, thanks for the feedback -- Joel.

On 7/3/2025 7:52 AM, Tolbert, Andy wrote:

Hi Joel,

+1 (nb), I think this is a really good idea and well fleshed our CEP!

The capability to allow the server to support multiple authenticators would be very useful.  CEP-34 added a 'MutualTlsWithPasswordFallbackAuthenticator' for simultaneously supporting both mTLS and Password authentication, primarily as a means to introduce mTLS auth without breaking password auth and also a possible gradual migration to mTLS, but this only works for combining these two particular authenticators, and also creates another authenticator to support.

The migration to any new auth strategy would likely involve the need to simultaneously support an existing and new auth provider.  I think the approach you describe is well described and should meet this need assuming users use a driver that supports it.

In terms of the protocol, utilizing the capabilities of the existing OPTIONS, STARTUP and SUPPORTED messages to communicate what authenticators are supported/should be used is pretty clever as it shouldn't require a protocol version uprev, and hopefully wouldn't be too complicated for a driver to implement.

Thanks,
Andy

On Mon, Jun 30, 2025 at 11:44 AM Joel Shepherd <sheph...@amazon.com> wrote:

    Erm ... and here's the CEP:
    
https://cwiki.apache.org/confluence/display/CASSANDRA/CEP-50%3A+Authentication+Negotiation

    (Thanks for the heads up, Abe ...)

    -- Joel.

    On 6/30/2025 9:37 AM, Joel Shepherd wrote:
    > Hello - We would like to propose CEP-50: Authentication Negotiation
    > for adoption by the community: <link> .
    >
    > This CEP proposes minor changes to the initial handshake protocol
    > (OPTIONS, SUPPORTED and STARTUP messages) to enable a client to
    inform
    > the node of the authenticators supported by the client, and
    changes in
    > the node's authentication-related areas to enable it to pick its
    > preferred authenticator for each client client connection. The CEP
    > explains why this approach is proposed, instead of implementing a
    > "negotiating authenticator".
    >
    > Authentication negotiation will make it easier and safer for
    > administrators to migrate clusters to stronger authentication
    > mechanisms (including switching on authentication for a cluster
    that
    > has been using "allow-all" authentication) without downtime, and to
    > support environments where different clients prefer different
    > authentication mechanisms (e.g., username and password for ad-hoc
    > cqlsh access, mutual TLS for programmatic access, etc.), without
    > having to pick a single "lowest common denominator"
    authenticator for
    > all. Additionally, the proposed changes are intended to be
    backwards
    > compatible for both clients and nodes.
    >
    > Thanks in advance for your time and feedback. Please keep the
    > discussion on this mailing list thread.
    >
    > Thanks! -- Joel.
    >
    >
    >
    >

Reply via email to