Re-reading your message I now understand what you are saying. You wish to update the OPTIONS response sent pre SASL. I’m still not sure that’s actually required. The SASL Authenticate/Auth_Response can be what ever you want it to be. As long as what you implement supports recognizing/falling back to the existing method that just does its thing. I think you should be able to add the “list” ability you want for clients that know how to do that.
> On Dec 4, 2024, at 6:41 PM, Jeremiah Jordan <jerem...@datastax.com> wrote: > > I think you are talking about the SASL handshake? The authenticator can > override the SASL handler for the connections. The negotiating authenticator > just needs to implement that override? You can then implement the flow you > mentioned. > > At DataStax we do basically exactly that to support negotiated > authentication. As you suggest the “default” mechanism is also specified in > the config for the negotiating authenticator such that you can have it fall > back to the “current” mechanism for existing clients that don’t try to > negotiate. Which means it can be seamlessly enabled. > > -Jeremiah > >> On Dec 4, 2024, at 5:27 PM, Joel Shepherd <sheph...@amazon.com> wrote: >> >> A negotiating authenticator is appealing, but I'm concerned that it doesn't >> have a good migration story. If a client has not been configured with a >> "negotiating provider" before it attempts to connect to a node with a >> negotiating authenticator, the results will be unpredictable. Today, the >> AUTHENTICATE message names the node-selected authenticator for the client, >> but there is no requirement that the client validate that it can work with >> the authenticator before its own auth provider/authenticator generates its >> initial AUTH_RESPONSE. From what I can tell, most don't validate. There is >> not a way today at the protocol level for the client to tell the node "I >> can't work with the authenticator you've specified: let's try a different >> one." The node can't communicate that to the client either. Once a node >> switches over to a negotiating authenticator, many clients will assume that >> they can authenticate using the same mechanism that they always have. This >> would require the node's authenticator to heuristically determine how the >> client is trying to authenticate in order to continue the handshake. That >> seems unreliable, but I believe without that then switching nodes to a >> negotiating authenticator will either require downtime (to switch the >> clients as well) or result in client authentication failures. >> >> If the negotiation is done up-front via the OPTIONS, SUPPORTED and START >> messages, I believe it can be done in a way that enables clients and/or >> nodes to authenticate as they do today if needed. For example, clients that >> do not initiate connections with an OPTIONS message and that do not select >> an auth method via their START message can be assumed to not support >> negotiation, and the node can use today's existing authentication mechanism >> with the client. Similarly, nodes that do not specify available >> authenticators through their SUPPORTED response can be assumed to not >> support negotiation and the client can use today's authentication mechanism >> without negotiation. >> >> Given that, I don't believe introducing a new negotiating authenticator is >> the best path forward. >> >> If it would help, I can provide documentation on the proposed protocol-based >> mechanism: it may be unclear here. >> >> Thanks -- Joel. >> >>>> On 12/3/2024 5:34 PM, J. D. Jordan wrote: >>> I think you can implement this as a single authenticator that has separate >>> configuration of the supported mechanisms. So the single authenticator >>> maintained is the “negotiating authenticator” which can proxy off to which >>> ever other mechanisms you want. >>> >>>>> On Dec 3, 2024, at 6:37 PM, Joel Shepherd <sheph...@amazon.com> wrote: >>>> >>>> I'm interested, at least in a more narrowly-scoped subset of CEP-31: >>>> authentication negotiation only, configured via YAML (not dynamically), >>>> with CQL integration, proxy authorization, multiple role managers and new >>>> authn mechanisms out of scope. >>>> >>>> I've started working through Derek's proposal in >>>> https://issues.apache.org/jira/browse/CASSANDRA-11471 , to use the >>>> OPTIONS/SUPPORTED exchange to start the negotiation, and continue it by >>>> extending STARTUP to optionally include the client's preferred >>>> authentication mechanism. I believe this can be done in a way that is >>>> compatible (i.e., maintains the status quo) for clients and/or nodes that >>>> aren't negotiation-aware. Having such a mechanism in place would make it >>>> much safer to roll out new authenticators, which is something else I'm >>>> interested in. >>>> >>>> This is looking like a more invasive change on the Cassandra core side, >>>> however. If I'm reading things correctly, the DatabaseDescriptor maintains >>>> a single authenticator across all clients. Negotiation would be much more >>>> useful if different clients could use different node-supported >>>> authentication mechanisms: e.g., automated clients could use mTLS and apps >>>> for humans could use Kerberos, both against a single node. This means that >>>> authenticator needs to be pushed down to connection- or session-level, >>>> which will affect everything from the daemon startup code to the >>>> authentication workflow. That's not a reason not to do it, but it is a >>>> little invasive. Maybe I'm overlooking a better way. >>>> >>>> If time allows, I'll put together a rough patch this month for initial >>>> feedback, but am happy to discuss here or however folks want to proceed. >>>> >>>> -- Joel. >>>> >>>> >>>> On 2024/09/19 17:56:07 Dinesh Joshi wrote: >>>>> This is an area of interest for me personally and is an important feature. >>>>> Not sure if the original author is going to see it through since we've not >>>>> had any discussion on it for a while. >>>>> >>>>> Is anybody interested in picking this up? >>>>> >>>>> Dinesh >>>>> >>>>> On Thu, Sep 19, 2024 at 10:54 AM Patrick McFadin <pm...@gmail.com> wrote: >>>>> >>>>>> Hi Jacek, >>>>>> >>>>>> I was doing some housekeeping on CEPs and noticed this stalled. Is this >>>>>> still a CEP you are advocating for? >>>>>> >>>>>> Anyone else that knows the status, feel free to add in. >>>>>> >>>>>> Patrick >>>>>> >>>>>> On Wed, May 31, 2023 at 8:26 AM Derek Chen-Becker <de...@chen-becker.org> >>>>>> wrote: >>>>>> >>>>>>> Hi Jacek, >>>>>>> >>>>>>> I took a quick look through the CEP and I think I understand the >>>>>>> implementation you're donating. I don't think that the approach you're >>>>>>> taking and the approach I proposed are contradictory, but I want to make >>>>>>> sure I'm understanding some aspects of the CEP: >>>>>>> >>>>>>> 1. Is there any mechanism for discovery so that the client knows which >>>>>>> authenticators are supported? The main use case I see here is that since >>>>>>> the client drives selection of the authenticator, the client probably >>>>>>> wants >>>>>>> to utilize the strongest mutually supported mechanism >>>>>>> 2. Can you specify the client/server exchange in a state diagram or more >>>>>>> clearly detail which messages are involved? The CEP states that "The >>>>>>> driver >>>>>>> sends an additional preamble along with the initial SASL authentication >>>>>>> message". Is the "initial SASL auth message" the AUTH_RESPONSE? Are you >>>>>>> basically saying that the server sends the AUTHENTICATE message with a >>>>>>> class name, so does the client basically respond with "No, here's the >>>>>>> authenticator I want to use" in the preamble? >>>>>>> 3. Does the donated code for the server already handle hot >>>>>>> reconfiguration of authenticators? The CEP states "We want to make it >>>>>>> possible to add, ..." so I wasn't sure if that was future work or not >>>>>>> >>>>>>> I think I need to re-read and digest, but on first run-through this >>>>>>> looks >>>>>>> really interesting! >>>>>>> >>>>>>> Cheers, >>>>>>> >>>>>>> Derek >>>>>>> >>>>>>> On Fri, May 26, 2023 at 8:09 AM Jacek Lewandowski < >>>>>>> lewandowski.ja...@gmail.com> wrote: >>>>>>> >>>>>>>> Hi, >>>>>>>> >>>>>>>> I'd like to start a discussion on negotiated authentication and >>>>>>>> improvements to authentication, authorization, and role management in >>>>>>>> general. A draft of proposed changes is included in CEP-31. >>>>>>>> >>>>>>>> >>>>>>>> https://cwiki.apache.org/confluence/display/CASSANDRA/CEP-31+%28DRAFT%29+Negotiated+authentication+and+authorization >>>>>>>> >>>>>>>> thanks, >>>>>>>> - - -- --- ----- -------- ------------- >>>>>>>> Jacek Lewandowski >>>>>>>> >>>>>>> >>>>>>> -- >>>>>>> +---------------------------------------------------------------+ >>>>>>> | Derek Chen-Becker | >>>>>>> | GPG Key available at https://keybase.io/dchenbecker and | >>>>>>> | https://pgp.mit.edu/pks/lookup?search=derek%40chen-becker.org | >>>>>>> | Fngrprnt: EB8A 6480 F0A3 C8EB C1E7 7F42 AFC5 AFEE 96E4 6ACC | >>>>>>> +---------------------------------------------------------------+ >>>>>>> >>>>>>>