Agree with Gwen here. I feel like these additional pluggable Login
Modules are making this KIP complex. Since the main goal of the KIP is
to enable additional mechanism , can we limit the scope to that and If
we feel necessary for pluggable Login and callback handler classes we
can address in another JIRA.

Adding digest-md5 ,password callbacks can be done to existing
callbackhandler without  expose it as pluggable class. It would be
useful to have broker support multiple mechanisms.  I haven't seen
anyone using more than this in hadoop . It might be different for Kafka
but I personally haven't seen anyone asking for this yet. 

Thanks,
Harsha


On Thu, Mar 10, 2016, at 01:44 AM, Rajini Sivaram wrote:
> Gwen,
> 
> Just to be clear, the alternative would be:
> 
> *jaas.conf:*
> 
> GssapiKafkaServer {
> 
> com.ibm.security.auth.module.Krb5LoginModule required
> credsType=both
> useKeytab="file:/kafka/key.tab"
> principal="kafka/localh...@example.com <http://example.com/>";
> 
> };
> 
> SmartcardKafkaServer {
> 
>   example.SmartcardLoginModule required
> 
>   cardNumber=123;
> 
> };
> 
> 
> *KafkaConfig*
> 
> 
> 
>    - login.context.map={"GSSAPI="GssapiKafkaServer",
>       "SMARTCARD"=SmartcardKafkaServer}
>       - login.class.map={"GSSAPI=GssapiLogin.class,
>       "SMARTCARD"=SmartcardLogin.class}
>       - callback.handler.class.map={"GSSAPI"=GssapiCallbackHandler.class,
>       "SMARTCARD"=SmartcardCallbackHandler.class}
> 
> *Client Config *
> Same as the server, but with only one entry allowed in each map and
> jaas.conf
> 
> 
> 
> This is a different model from the Java standard for supporting multiple
> logins. As a developer, I am inclined to stick with approaches that are
> widely in use like JSSE. But this alternative can be made to work if the
> Kafka community feels it is more appropriate for Kafka. If you know of
> other systems which use this approach, that would be helpful.
> 
> 
> 
> On Thu, Mar 10, 2016 at 2:07 AM, Gwen Shapira <g...@confluent.io> wrote:
> 
> > What I'm hearing is that:
> >
> > 1. In order to support authentication mechanisms that were not written
> > specifically with Kafka in mind, someone will need to write the
> > integration between the mechanism and Kafka. This may include Login
> > and CallbackHandler classes. This can be the mechanism vendor, the
> > user or a 3rd party vendor.
> > 2. If someone wrote the code to support a mechanism in Kafka, and a
> > user will want to use more than one mechanism, they will still need to
> > write a wrapper.
> > 3. In reality, #2 will not be necessary ("edge-case") because Kafka
> > will actually already provide the callback needed (and presumably also
> > the code to load the LoginModule provided by Example.com)?
> >
> > Tradeoff #1 sounds reasonable.
> > #2 and #3 do not sound reasonable considering one of the goals of the
> > patch is to support multiple mechanisms. I don't think we should force
> > our users to write code just to avoid writing it ourselves.
> > Configuring security is complex enough as is.
> > Furthermore, if we believe that "Smartcard is likely to use standard
> > NameCallback and PasswordCallback already implemented in Kafka" - why
> > do we even provide configuration for Login and CallbackHandler
> > classes? Either we support multiple mechanisms written by different
> > vendors, or we don't.
> >
> > Gwen
> >
> >
> > On Wed, Mar 9, 2016 at 12:32 AM, Rajini Sivaram
> > <rajinisiva...@googlemail.com> wrote:
> > > I am not saying that the developer at Example Inc. would develop a Login
> > > implementation that combines Smartcard and Kerberos because Retailer uses
> > > both. I am saying that Example Inc develops the LoginModule (similar to
> > JVM
> > > security providers developing Kerberos modules). But there is no standard
> > > interface for Login to allow ticket refresh. So, it is very unlikely that
> > > Example Inc would develop a Login implementation that works with an
> > Apache
> > > Kafka defined interface ( Kafka developers wrote this code for Kerberos).
> > > For a custom integration, the user (i.e. Retailer) would be expected to
> > > develop this code if required.
> > >
> > > You could imagine that Smartcard is a commonly used mechanism and a 3rd
> > > party develops code for integrating Smartcard with Kafka and makes the
> > > integration code (Login and CallbackHandler implementation) widely
> > > available, If Retailer wants to use clients or a broker with just
> > Smartcard
> > > enabled in their broker, they configure Kafka to use the 3rd party code,
> > > with no additional code development. But to combine Smartcard and
> > Kerberos,
> > > Retailer needs to write a few lines of code to incorporate both Smartcard
> > > and Kerberos. I believe this is an edge case.
> > >
> > > Smartcard is likely to use standard NameCallback and PasswordCallback
> > > already implemented in Kafka and Kerberos support exists in Kafka. So it
> > is
> > > very likely that Retailer doesn't need to override Login or
> > CallbackHandler
> > > in this case. And it would just be a matter of configuring the
> > mechanisms.
> > >
> > > On Wed, Mar 9, 2016 at 12:48 AM, Gwen Shapira <g...@confluent.io> wrote:
> > >
> > >> "Since smart card logins are not built into Kafka (or the JDK), you
> > need a
> > >> developer to build the login module. So the developer implements
> > >> example.SmartcardLoginModule. In addition, the developer may also
> > implement
> > >> callback handlers for the SASL client or server  and a login class to
> > keep
> > >> this login refreshed. The callback handlers and login implementation
> > >> support all the mechanisms that the organisation supports - in this case
> > >> Kerberos and smart card."
> > >>
> > >> In this case, the developer works for Example Inc (which develops
> > >> SmartCard authentication modules), while I work for Retailer and need
> > >> to use his module.
> > >> You assume that developer from Example Inc knows about all the
> > >> mechanisms that I have enabled in my Kafka cluster and he is capable
> > >> of developing a Login class and maybe a callback handler that supports
> > >> all of them. I think this is an unreasonable expectation.
> > >>
> > >> I think that allowing plug in of Login method and single Callback
> > >> handler is not a good extensible solution for multiple mechanisms. We
> > >> should probably supply a Kafka-based LoginContext and CallbackHandler
> > >> that will be able to delegate to implementations of LoginModules and
> > >> Callback Handlers based on mechanism out of a list supplied by a user.
> > >> I agree it is more complex, but otherwise we are asking of too much
> > >> coordination from whoever implements CallbackHandlers and Login
> > >> methods.
> > >>
> > >> Gwen
> > >>
> > >> On Tue, Mar 8, 2016 at 3:35 PM, Rajini Sivaram
> > >> <rajinisiva...@googlemail.com> wrote:
> > >> > As an admin, you would configure login modules using standard JAAS
> > >> > configuration. So, if you are supporting Kerberos and smart card login
> > >> > modules within a single broker, in your jaas.conf you would specify:
> > >> >
> > >> > KafkaServer {
> > >> >
> > >> > com.ibm.security.auth.module.Krb5LoginModule required
> > >> > credsType=both
> > >> > useKeytab="file:/kafka/key.tab"
> > >> > principal="kafka/localh...@example.com";
> > >> >
> > >> >   example.SmartcardLoginModule required
> > >> >
> > >> >   cardNumber=123
> > >> >
> > >> > };
> > >> >
> > >> >
> > >> > Since smart card logins are not built into Kafka (or the JDK), you
> > need a
> > >> > developer to build the login module. So the developer implements
> > >> > example.SmartcardLoginModule. In addition, the developer may also
> > >> implement
> > >> > callback handlers for the SASL client or server  and a login class to
> > >> keep
> > >> > this login refreshed. The callback handlers and login implementation
> > >> > support all the mechanisms that the organisation supports - in this
> > case
> > >> > Kerberos and smart card.
> > >> >
> > >> > As an admin, if you are using mechanisms built into Kafka, you simply
> > >> > specify a JAAS config with the combination of mechanisms you want and
> > you
> > >> > are done. If you are adding new mechanisms, it clearly can't be done
> > >> > without some additional code to implement that mechanism. The callback
> > >> and
> > >> > login interfaces are configurable to ensure that (as a developer), you
> > >> can
> > >> > build custom mechanisms without modifying Kafka. SASL was designed
> > >> > precisely to do this. But at the moment, Kafka restricts what type of
> > >> > authentication you can perform with SASL.
> > >> >
> > >> > Back to the questions:
> > >> > 1. *How does the proposed Login class interact with LoginContext and *
> > >> > *LoginModule.*
> > >> > Login class performs *LoginContext.login(). *This performs login for
> > all
> > >> > the login modules of that context (this is standard Java function).
> > Login
> > >> > is cached with a reference counter to keep it alive.
> > >> >
> > >> > 2. *Do we really need a pluggable Login class, when users
> > >> **(administrators,
> > >> > not developers) are more likely to want to specify LoginModules?*
> > >> > Administrators specify *LoginModules. *Developers implement new
> > >> mechanisms.
> > >> > The pluggable *Login* class enables the developer to implement new
> > >> > mechanisms without changing Kafka. If Kafka didn't have a default
> > >> Kerberos
> > >> > implementation and a user wanted to use Kerberos, pluggability of
> > >> *Login* class
> > >> > enables the user to include Kerberos without changing Kafka. Not that
> > we
> > >> > want another Kerberos, but Tao had a requirement to enable a custom
> > >> > mechanism with functionality similar to Kerberos (see KIP-44).
> > Pluggable
> > >> > *Login* supports this use case without replacing the entire
> > >> authentication
> > >> > mechanism in Kafka.
> > >> >
> > >> > *3. How will users get to specify multiple LoginModules?*
> > >> > Standard Java JAAS configuration - see example above.
> > >> >
> > >> >
> > >> > *4. It sounds like different LoginModules may need
> > >> > different CallbackHandlers. Since we only allow a single
> > >> > pluggableCallbackHandler class in the KIP-43 configuration, how will
> > this
> > >> > be handled?*
> > >> > One LoginContext, one subject, one callback handler, multiple login
> > >> > modules. This is the Java model for login. And it works well because
> > >> > callback handlers tend to be fairly standard. Even if the smart card
> > SASL
> > >> > callbacks needed to do something wildly different and you wanted a
> > broker
> > >> > that combined this with Kerberos, you would implement a callback that
> > >> > looked like the code below.
> > >> >
> > >> >         private CallbackHandler handler;
> > >> >
> > >> >         public void configure(Map<String, ?> configs, Mode mode,
> > Subject
> > >> > subject, String mechanism) {public void configure(Map<String, ?>
> > configs,
> > >> > Mode mode, Subject subject, String mechanism) {
> > >> >
> > >> >             switch (mechanism) {
> > >> >
> > >> >                 case "GSSAPI" : handler = new GssapiCallbackHandler();
> > >> break
> > >> > ;
> > >> >
> > >> >                 case "SMARTCARD" : handler = new
> > >> SmartcardCallbackHandler();
> > >> > break;
> > >> >
> > >> >             }
> > >> >
> > >> >         }
> > >> >
> > >> >
> > >> >         public void handle(Callback[] callbacks) throws IOException,
> > >> > UnsupportedCallbackException {
> > >> >
> > >> >             handler.handle(callbacks);
> > >> >
> > >> >         }
> > >> >
> > >> > But I don't see this as just an admin configuration. This is some code
> > >> > developed alongside a new mechanism. Yes, you can add a new
> > configuration
> > >> > type in Kafka that maps mechanism to callback handler class to avoid
> > the
> > >> > switch statement. But that doesn't remove the need for new code
> > >> altogether
> > >> > since you still need to implement SmartcardCallbackHandler. Multiple
> > >> > conflicting callback handlers within one broker to support complete
> > >> > different behaviour is an edge case. Since the design supports
> > >> > full flexibility in terms of functionality and you have to write new
> > code
> > >> > for new mechanisms anyway, this feels like the simplest solution.
> > >> >
> > >> >
> > >> >
> > >> > On Tue, Mar 8, 2016 at 8:23 PM, Gwen Shapira <g...@confluent.io>
> > wrote:
> > >> >
> > >> >> I guess what is unclear to me is:
> > >> >>
> > >> >> 1. How does the proposed Login class interact with LoginContext and
> > >> >> LoginModule.
> > >> >> 2. Do we really need a pluggable Login class, when users
> > >> >> (administrators, not developers) are more likely to want to specify
> > >> >> LoginModules?
> > >> >> 3. How will users get to specify multiple LoginModules?
> > >> >> 4. It sounds like different LoginModules may need different
> > >> >> CallbackHandlers. Since we only allow a single pluggable
> > >> >> CallbackHandler class in the KIP-43 configuration, how will this be
> > >> >> handled?
> > >> >>
> > >> >> In other words, suppose I want my Kafka installation to support both
> > >> >> Kerberos and SmartCard mechanisms, can you tell me how to configure
> > >> >> Kafka? (as admin, not developer)?
> > >> >>
> > >> >> Gwen
> > >> >>
> > >> >>
> > >> >>
> > >> >> On Tue, Mar 8, 2016 at 11:46 AM, Rajini Sivaram
> > >> >> <rajinisiva...@googlemail.com> wrote:
> > >> >> > Gwen,
> > >> >> >
> > >> >> > I am not sure I understand your concern. Java login contexts
> > support
> > >> >> > multiple login modules precisely to support this type of real-world
> > >> >> > scenario.
> > >> >> >
> > >> >> > From Javadoc of *javax.security.auth.login.LoginContext*:
> > >> >> >
> > >> >> > *In addition to supporting pluggable authentication, this class
> > also
> > >> >> > supports the notion of stacked authentication. Applications may be
> > >> >> > configured to use more than one LoginModule. For example, one could
> > >> >> > configure both a Kerberos LoginModule and a smart card LoginModule
> > >> under
> > >> >> an
> > >> >> > application. *
> > >> >> >
> > >> >> > * A typical caller instantiates a LoginContext with a name and a
> > >> >> > CallbackHandler. LoginContext uses the name as the index into a
> > >> >> > Configuration to determine which LoginModules should be used, and
> > >> which
> > >> >> > ones must succeed in order for the overall authentication to
> > succeed.
> > >> The
> > >> >> > CallbackHandler is passed to the underlying LoginModules so they
> > may
> > >> >> > communicate and interact with users (prompting for a username and
> > >> >> password
> > >> >> > via a graphical user interface, for example).*
> > >> >> >
> > >> >> > If it is good enough for Java, surely it must be good enough for
> > >> Kafka.
> > >> >> We
> > >> >> > don't expect users to directly use existing classes when they want
> > to
> > >> >> > support complex new mechanisms. Login is not a standard interface,
> > >> and we
> > >> >> > want to make callback handlers configurable. So we do require
> > users to
> > >> >> wrap
> > >> >> > their existing classes in our interface. And the interfaces make it
> > >> >> > possible to plugin any number of mechanisms. Am I missing
> > something?
> > >> >> >
> > >> >> >
> > >> >> >
> > >> >> > On Tue, Mar 8, 2016 at 4:49 PM, Gwen Shapira <g...@confluent.io>
> > >> wrote:
> > >> >> >
> > >> >> >> Yes, I understand that.
> > >> >> >>
> > >> >> >> However, because the current configuration only allows a single
> > >> >> >> callback and a single login module, I need to supply a class that
> > >> >> >> supports callbacks or logins for every single mechanism that I
> > need
> > >> to
> > >> >> >> support. I question whether this is applicable in real-world
> > scenario
> > >> >> >> where a user may need to support mechanisms that were written by
> > >> >> >> different vendors and where a single class that implements all the
> > >> >> >> necessary modules or callsbacks is very unlikely to exist.
> > >> >> >>
> > >> >> >> I agree that supporting a list of classes and dynamically using
> > the
> > >> >> >> correct callbacks and modules based on configuration is complex,
> > but
> > >> I
> > >> >> >> don't think this feature is useful enough without it.
> > >> >> >>
> > >> >> >> Gwen
> > >> >> >>
> > >> >> >> On Tue, Mar 8, 2016 at 2:40 AM, Rajini Sivaram
> > >> >> >> <rajinisiva...@googlemail.com> wrote:
> > >> >> >> > Gwen,
> > >> >> >> >
> > >> >> >> > Sorry if this is not clear in the KIP. The goal of the KIP is to
> > >> >> enable
> > >> >> >> new
> > >> >> >> > mechanisms to be added without any changes to Apache Kafka. The
> > >> >> >> > configuration proposed by the KIP is based on the
> > configurability
> > >> of
> > >> >> the
> > >> >> >> > Java SASL API and what it would take to add a new mechanism
> > >> similar to
> > >> >> >> > Kerberos/PLAIN/Digest-MD5 and the requirements that Tao raised
> > for
> > >> >> custom
> > >> >> >> > authentication.
> > >> >> >> >
> > >> >> >> > The PR includes a test for Digest-MD5 which is not included in
> > >> Kafka,
> > >> >> but
> > >> >> >> > is tested using the configuration options that allow new
> > mechanisms
> > >> >> to be
> > >> >> >> > added.
> > >> >> >> >
> > >> >> >> > If you want to add a more complex mechanism which requires
> > >> integration
> > >> >> >> with
> > >> >> >> > some external authentication libraries for login or callback
> > >> handlers,
> > >> >> >> you
> > >> >> >> > can do that by configuring your own callback handler and login
> > >> >> >> > implementation. The login class allows you to add additional
> > >> threads
> > >> >> (for
> > >> >> >> > instance for token refresh), while the callback handler extends
> > the
> > >> >> >> > standard Java CallbackHandler interface, enabling you to
> > override
> > >> any
> > >> >> of
> > >> >> >> > the default callbacks in Kafka to provide your own behaviour. If
> > >> you
> > >> >> want
> > >> >> >> > to add your own login modules, SASL server or SASL client
> > >> >> implementation
> > >> >> >> > for a mechanism that is not supported in your JDK, you can do
> > that
> > >> by
> > >> >> >> > adding new Java security modules, using the built-in
> > pluggability
> > >> of
> > >> >> Java
> > >> >> >> > security.
> > >> >> >> >
> > >> >> >> > And finally, if you want to enable multiple mechanisms in your
> > >> Kafka
> > >> >> >> > brokers, you can specify a callback handler class that either
> > >> provides
> > >> >> >> the
> > >> >> >> > handlers for all the mechanisms (as the PR does for Kerberos and
> > >> >> PLAIN)
> > >> >> >> or
> > >> >> >> > a delegator that calls different callback handlers based on the
> > >> >> >> mechanism.
> > >> >> >> > And for login, you provide a single or a compound class that
> > >> provides
> > >> >> any
> > >> >> >> > additional login logic for all the login modules that you have
> > >> >> specified
> > >> >> >> > for KafkaServer.
> > >> >> >> >
> > >> >> >> > Hope that helps.
> > >> >> >> >
> > >> >> >> >
> > >> >> >> > On Tue, Mar 8, 2016 at 1:17 AM, Gwen Shapira <g...@confluent.io
> > >
> > >> >> wrote:
> > >> >> >> >
> > >> >> >> >> Can you explain the process for a adding a new mechanism based
> > on
> > >> >> >> current
> > >> >> >> >> KIP?
> > >> >> >> >>
> > >> >> >> >> My thought is that if it requires modifying Apache Kafka code,
> > it
> > >> is
> > >> >> >> >> not pluggable enough.
> > >> >> >> >>
> > >> >> >> >> On Mon, Mar 7, 2016 at 4:04 PM, Rajini Sivaram
> > >> >> >> >> <rajinisiva...@googlemail.com> wrote:
> > >> >> >> >> > Gwen,
> > >> >> >> >> >
> > >> >> >> >> > In cases where you want completely different callbacks for
> > >> >> different
> > >> >> >> >> > mechanisms, I was thinking that the choice would be between a
> > >> map
> > >> >> of
> > >> >> >> >> > classes (mechanism -> callbackHandler class) or a delegator
> > >> class
> > >> >> that
> > >> >> >> >> > chooses the appropriate callback handler class based on
> > >> mechanism.
> > >> >> I
> > >> >> >> >> chose
> > >> >> >> >> > the latter since it makes it easier to configure in Kafka.
> > >> Since we
> > >> >> >> >> create
> > >> >> >> >> > a callback handler for each channel and configure it with the
> > >> >> >> >> > client-selected mechanism, it is straightforward to have one
> > >> >> wrapper
> > >> >> >> >> class
> > >> >> >> >> > that delegates to the right mechanism-specific class to
> > handle
> > >> >> >> callbacks.
> > >> >> >> >> > In many cases, a single class may be sufficient (the PR uses
> > a
> > >> >> single
> > >> >> >> >> > callback class for Kerberos and PLAIN). I do see your point
> > >> about
> > >> >> the
> > >> >> >> >> > flexibility that multiple classes would provide, but since
> > you
> > >> need
> > >> >> >> to be
> > >> >> >> >> > able to associate the callback with a mechanism for this to
> > be
> > >> >> >> useful, I
> > >> >> >> >> am
> > >> >> >> >> > not sure if just a list would add value.
> > >> >> >> >> >
> > >> >> >> >> > Login class is slightly different since the proposal is to
> > use a
> > >> >> >> single
> > >> >> >> >> > login context with multiple login modules to handle multiple
> > >> >> >> mechanisms.
> > >> >> >> >> In
> > >> >> >> >> > this case, you want to perform login for all the mechanisms
> > that
> > >> >> are
> > >> >> >> >> > enabled. And you want to call loginContext.login() only once.
> > >> >> Again,
> > >> >> >> you
> > >> >> >> >> > can delegate to multiple classes if you wish to add some
> > complex
> > >> >> >> >> > mechanism-specific logic, but a single login class makes the
> > >> >> mapping
> > >> >> >> to a
> > >> >> >> >> > single login context and the login cache more obvious (the PR
> > >> has a
> > >> >> >> test
> > >> >> >> >> > that includes Kerberos and PLAIN).
> > >> >> >> >> >
> > >> >> >> >> > Thoughts?
> > >> >> >> >> >
> > >> >> >> >> > On Mon, Mar 7, 2016 at 9:57 PM, Gwen Shapira <
> > g...@confluent.io
> > >> >
> > >> >> >> wrote:
> > >> >> >> >> >
> > >> >> >> >> >> Hi,
> > >> >> >> >> >>
> > >> >> >> >> >> Before I can vote on this KIP, I have two additional
> > questions
> > >> /
> > >> >> >> >> >> comments on the new configuration:
> > >> >> >> >> >>
> > >> >> >> >> >> 1. sasl.callback.handler.class - it looks like we want a
> > single
> > >> >> class
> > >> >> >> >> >> that implements all mechanisms. I think this will make it
> > >> >> difficult
> > >> >> >> to
> > >> >> >> >> >> extend since the only way I can add a mechanism will be by
> > >> >> >> >> >> implementing every single existing mechanism (otherwise
> > >> customers
> > >> >> >> will
> > >> >> >> >> >> need to choose between new and existing when selecting which
> > >> >> class to
> > >> >> >> >> >> use). If Microsoft releases a proprietary "AD Mechanism" and
> > >> >> Oracle
> > >> >> >> >> >> releases "OID mechanism", there will be no class that
> > >> implements
> > >> >> >> both.
> > >> >> >> >> >> Can we make it a list of classes instead? I realize this
> > >> >> complicates
> > >> >> >> >> >> the code a bit (some kind of factory will be required to
> > choose
> > >> >> the
> > >> >> >> >> >> right class to use), but important IMO.
> > >> >> >> >> >> 2. similar for sasl.login.class - if I have a class for
> > >> Kerberos
> > >> >> >> (with
> > >> >> >> >> >> refresh thread) and a class for "plain", we need to be able
> > to
> > >> >> load
> > >> >> >> >> >> both.
> > >> >> >> >> >>
> > >> >> >> >> >> Gwen
> > >> >> >> >> >>
> > >> >> >> >> >> On Wed, Mar 2, 2016 at 12:30 AM, Rajini Sivaram
> > >> >> >> >> >> <rajinisiva...@googlemail.com> wrote:
> > >> >> >> >> >> > Jun,
> > >> >> >> >> >> >
> > >> >> >> >> >> > Thanks, I have added a note to the KIP. I will add a
> > comment
> > >> in
> > >> >> the
> > >> >> >> >> >> > implementation and also add a unit test to ensure that
> > >> conflicts
> > >> >> >> are
> > >> >> >> >> >> > avoided when version number is modified.
> > >> >> >> >> >> >
> > >> >> >> >> >> > On Tue, Mar 1, 2016 at 5:43 PM, Jun Rao <j...@confluent.io
> > >
> > >> >> wrote:
> > >> >> >> >> >> >
> > >> >> >> >> >> >> Rajini,
> > >> >> >> >> >> >>
> > >> >> >> >> >> >> Thanks for the explanation. For 1, this implies that we
> > have
> > >> >> to be
> > >> >> >> >> >> careful
> > >> >> >> >> >> >> with changing the 2-byte version in the future to avoid
> > >> >> conflict.
> > >> >> >> >> Could
> > >> >> >> >> >> you
> > >> >> >> >> >> >> document this in the KIP and also in the implementation?
> > >> >> >> >> >> >>
> > >> >> >> >> >> >> Jun
> > >> >> >> >> >> >>
> > >> >> >> >> >> >> On Tue, Mar 1, 2016 at 2:47 AM, Rajini Sivaram <
> > >> >> >> >> >> >> rajinisiva...@googlemail.com
> > >> >> >> >> >> >> > wrote:
> > >> >> >> >> >> >>
> > >> >> >> >> >> >> > Jun,
> > >> >> >> >> >> >> >
> > >> >> >> >> >> >> > Thank you for the review.
> > >> >> >> >> >> >> >
> > >> >> >> >> >> >> >
> > >> >> >> >> >> >> >    1. With GSSAPI, the first context establishment
> > packet
> > >> >> starts
> > >> >> >> >> with
> > >> >> >> >> >> the
> > >> >> >> >> >> >> >    byte 0x60 (tag for APPLICATION-0) followed by a
> > >> >> >> variable-length
> > >> >> >> >> >> >> encoded
> > >> >> >> >> >> >> >    size, followed by various tags and contents. And the
> > >> >> packet
> > >> >> >> also
> > >> >> >> >> >> >> > contains a
> > >> >> >> >> >> >> >    checksum. This is completely different from the
> > >> mechanism
> > >> >> >> packet
> > >> >> >> >> >> from
> > >> >> >> >> >> >> > Kafka
> > >> >> >> >> >> >> >    clients which start with a two-byte version set to
> > zero
> > >> >> >> >> currently,
> > >> >> >> >> >> >> > followed
> > >> >> >> >> >> >> >    by just a String mechanism.
> > >> >> >> >> >> >> >    2. Agreed, I have removed the version from the
> > server
> > >> >> >> response
> > >> >> >> >> in
> > >> >> >> >> >> the
> > >> >> >> >> >> >> >    KIP. Thanks.
> > >> >> >> >> >> >> >
> > >> >> >> >> >> >> >
> > >> >> >> >> >> >> > On Tue, Mar 1, 2016 at 2:33 AM, Jun Rao <
> > j...@confluent.io
> > >> >
> > >> >> >> wrote:
> > >> >> >> >> >> >> >
> > >> >> >> >> >> >> > > Rajini,
> > >> >> >> >> >> >> > >
> > >> >> >> >> >> >> > > Thanks for the updates. Just a couple of minor
> > comments.
> > >> >> >> >> >> >> > >
> > >> >> >> >> >> >> > > 1. With the default GSSAPI, what's the first packet
> > that
> > >> >> the
> > >> >> >> >> client
> > >> >> >> >> >> >> sends
> > >> >> >> >> >> >> > > to the server? Is that completely different from the
> > >> packet
> > >> >> >> >> format
> > >> >> >> >> >> that
> > >> >> >> >> >> >> > we
> > >> >> >> >> >> >> > > will use for non-GSSAPI mechanisms?
> > >> >> >> >> >> >> > >
> > >> >> >> >> >> >> > > 2. In the server response, it doesn't seem that we
> > need
> > >> to
> > >> >> >> >> include
> > >> >> >> >> >> the
> > >> >> >> >> >> >> > > version since the client knows the version of the
> > >> request
> > >> >> >> that it
> > >> >> >> >> >> >> sends.
> > >> >> >> >> >> >> > >
> > >> >> >> >> >> >> > > Jun
> > >> >> >> >> >> >> > >
> > >> >> >> >> >> >> > > On Mon, Feb 29, 2016 at 10:14 AM, Rajini Sivaram <
> > >> >> >> >> >> >> > > rajinisiva...@googlemail.com> wrote:
> > >> >> >> >> >> >> > >
> > >> >> >> >> >> >> > > > Harsha,
> > >> >> >> >> >> >> > > >
> > >> >> >> >> >> >> > > > Thank you for the review. I will wait another day
> > to
> > >> see
> > >> >> if
> > >> >> >> >> there
> > >> >> >> >> >> is
> > >> >> >> >> >> >> > more
> > >> >> >> >> >> >> > > > feedback and then start a voting thread.
> > >> >> >> >> >> >> > > >
> > >> >> >> >> >> >> > > > Rajini
> > >> >> >> >> >> >> > > >
> > >> >> >> >> >> >> > > > On Mon, Feb 29, 2016 at 2:51 PM, Harsha <
> > >> ka...@harsha.io
> > >> >> >
> > >> >> >> >> wrote:
> > >> >> >> >> >> >> > > >
> > >> >> >> >> >> >> > > > > Rajini,
> > >> >> >> >> >> >> > > > >               Thanks for the changes to the KIP.
> > It
> > >> >> looks
> > >> >> >> >> good
> > >> >> >> >> >> to
> > >> >> >> >> >> >> > me. I
> > >> >> >> >> >> >> > > > >               think we can move to voting.
> > >> >> >> >> >> >> > > > > Thanks,
> > >> >> >> >> >> >> > > > > Harsha
> > >> >> >> >> >> >> > > > >
> > >> >> >> >> >> >> > > > > On Mon, Feb 29, 2016, at 12:43 AM, Rajini Sivaram
> > >> >> wrote:
> > >> >> >> >> >> >> > > > > > I have added some more detail to the KIP based
> > on
> > >> the
> > >> >> >> >> >> discussion
> > >> >> >> >> >> >> in
> > >> >> >> >> >> >> > > the
> > >> >> >> >> >> >> > > > > > last KIP meeting to simplify support for
> > multiple
> > >> >> >> >> mechanisms.
> > >> >> >> >> >> >> Have
> > >> >> >> >> >> >> > > also
> > >> >> >> >> >> >> > > > > > changed the property names to reflect this.
> > >> >> >> >> >> >> > > > > >
> > >> >> >> >> >> >> > > > > > Also updated the PR in
> > >> >> >> >> >> >> > > > https://issues.apache.org/jira/browse/KAFKA-3149
> > >> >> >> >> >> >> > > > > > to
> > >> >> >> >> >> >> > > > > > reflect the KIP.
> > >> >> >> >> >> >> > > > > >
> > >> >> >> >> >> >> > > > > > Any feedback is appreciated.
> > >> >> >> >> >> >> > > > > >
> > >> >> >> >> >> >> > > > > >
> > >> >> >> >> >> >> > > > > > On Tue, Feb 23, 2016 at 9:36 PM, Rajini
> > Sivaram <
> > >> >> >> >> >> >> > > > > > rajinisiva...@googlemail.com> wrote:
> > >> >> >> >> >> >> > > > > >
> > >> >> >> >> >> >> > > > > > > I have updated the KIP based on the
> > discussion
> > >> in
> > >> >> the
> > >> >> >> KIP
> > >> >> >> >> >> >> meeting
> > >> >> >> >> >> >> > > > > today.
> > >> >> >> >> >> >> > > > > > >
> > >> >> >> >> >> >> > > > > > > Comments and feedback are welcome.
> > >> >> >> >> >> >> > > > > > >
> > >> >> >> >> >> >> > > > > > > On Wed, Feb 3, 2016 at 7:20 PM, Rajini
> > Sivaram <
> > >> >> >> >> >> >> > > > > > > rajinisiva...@googlemail.com> wrote:
> > >> >> >> >> >> >> > > > > > >
> > >> >> >> >> >> >> > > > > > >> Hi Harsha,
> > >> >> >> >> >> >> > > > > > >>
> > >> >> >> >> >> >> > > > > > >> Thank you for the review. Can you clarify -
> > I
> > >> >> think
> > >> >> >> you
> > >> >> >> >> are
> > >> >> >> >> >> >> > saying
> > >> >> >> >> >> >> > > > > that
> > >> >> >> >> >> >> > > > > > >> the client should send its mechanism over
> > the
> > >> >> wire to
> > >> >> >> >> the
> > >> >> >> >> >> >> > server.
> > >> >> >> >> >> >> > > Is
> > >> >> >> >> >> >> > > > > that
> > >> >> >> >> >> >> > > > > > >> correct? The exchange is slightly different
> > in
> > >> the
> > >> >> >> KIP
> > >> >> >> >> >> (the PR
> > >> >> >> >> >> >> > > > > matches the
> > >> >> >> >> >> >> > > > > > >> KIP) from the one you described to enable
> > >> >> >> >> interoperability
> > >> >> >> >> >> >> with
> > >> >> >> >> >> >> > > > > 0.9.0.0.
> > >> >> >> >> >> >> > > > > > >>
> > >> >> >> >> >> >> > > > > > >>
> > >> >> >> >> >> >> > > > > > >> On Wed, Feb 3, 2016 at 1:56 PM, Harsha <
> > >> >> >> m...@harsha.io>
> > >> >> >> >> >> >> wrote:
> > >> >> >> >> >> >> > > > > > >>
> > >> >> >> >> >> >> > > > > > >>> Rajini,
> > >> >> >> >> >> >> > > > > > >>>            I looked at the PR you have. I
> > >> think
> > >> >> its
> > >> >> >> >> better
> > >> >> >> >> >> >> with
> > >> >> >> >> >> >> > > > your
> > >> >> >> >> >> >> > > > > > >>>            earlier approach rather than
> > >> extending
> > >> >> >> the
> > >> >> >> >> >> >> protocol.
> > >> >> >> >> >> >> > > > > > >>> What I was thinking initially is, Broker
> > has a
> > >> >> >> config
> > >> >> >> >> >> option
> > >> >> >> >> >> >> of
> > >> >> >> >> >> >> > > say
> > >> >> >> >> >> >> > > > > > >>> sasl.mechanism = GSSAPI, PLAIN
> > >> >> >> >> >> >> > > > > > >>> and the client can have similar config of
> > >> >> >> >> >> >> sasl.mechanism=PLAIN.
> > >> >> >> >> >> >> > > > > Client
> > >> >> >> >> >> >> > > > > > >>> can send its sasl mechanism before the
> > >> handshake
> > >> >> >> starts
> > >> >> >> >> >> and
> > >> >> >> >> >> >> if
> > >> >> >> >> >> >> > > the
> > >> >> >> >> >> >> > > > > > >>> broker accepts that particular mechanism
> > than
> > >> it
> > >> >> >> can go
> > >> >> >> >> >> ahead
> > >> >> >> >> >> >> > > with
> > >> >> >> >> >> >> > > > > > >>> handshake otherwise return a error saying
> > that
> > >> >> the
> > >> >> >> >> >> mechanism
> > >> >> >> >> >> >> > not
> > >> >> >> >> >> >> > > > > > >>> allowed.
> > >> >> >> >> >> >> > > > > > >>>
> > >> >> >> >> >> >> > > > > > >>> Thanks,
> > >> >> >> >> >> >> > > > > > >>> Harsha
> > >> >> >> >> >> >> > > > > > >>>
> > >> >> >> >> >> >> > > > > > >>> On Wed, Feb 3, 2016, at 04:58 AM, Rajini
> > >> Sivaram
> > >> >> >> wrote:
> > >> >> >> >> >> >> > > > > > >>> > A slightly different approach for
> > supporting
> > >> >> >> >> different
> > >> >> >> >> >> SASL
> > >> >> >> >> >> >> > > > > mechanisms
> > >> >> >> >> >> >> > > > > > >>> > within a broker is to allow the same
> > >> "*security
> > >> >> >> >> >> protocol*"
> > >> >> >> >> >> >> to
> > >> >> >> >> >> >> > > be
> > >> >> >> >> >> >> > > > > used
> > >> >> >> >> >> >> > > > > > >>> on
> > >> >> >> >> >> >> > > > > > >>> > different ports with different
> > configuration
> > >> >> >> >> options. An
> > >> >> >> >> >> >> > > > advantage
> > >> >> >> >> >> >> > > > > of
> > >> >> >> >> >> >> > > > > > >>> > this
> > >> >> >> >> >> >> > > > > > >>> > approach is that it extends the
> > >> >> configurability of
> > >> >> >> >> not
> > >> >> >> >> >> just
> > >> >> >> >> >> >> > > SASL,
> > >> >> >> >> >> >> > > > > but
> > >> >> >> >> >> >> > > > > > >>> any
> > >> >> >> >> >> >> > > > > > >>> > protocol. For instance, it would enable
> > the
> > >> >> use of
> > >> >> >> >> SSL
> > >> >> >> >> >> with
> > >> >> >> >> >> >> > > > mutual
> > >> >> >> >> >> >> > > > > > >>> client
> > >> >> >> >> >> >> > > > > > >>> > authentication on one port or different
> > >> >> >> certificate
> > >> >> >> >> >> chains
> > >> >> >> >> >> >> on
> > >> >> >> >> >> >> > > > > another.
> > >> >> >> >> >> >> > > > > > >>> > And
> > >> >> >> >> >> >> > > > > > >>> > it avoids the need for SASL mechanism
> > >> >> negotiation.
> > >> >> >> >> >> >> > > > > > >>> >
> > >> >> >> >> >> >> > > > > > >>> > Kafka would have the same "*security
> > >> protocols"
> > >> >> >> >> >> *defined as
> > >> >> >> >> >> >> > > > today,
> > >> >> >> >> >> >> > > > > but
> > >> >> >> >> >> >> > > > > > >>> > with
> > >> >> >> >> >> >> > > > > > >>> > (a single) configurable SASL mechanism.
> > To
> > >> have
> > >> >> >> >> >> different
> > >> >> >> >> >> >> > > > > > >>> configurations
> > >> >> >> >> >> >> > > > > > >>> > of
> > >> >> >> >> >> >> > > > > > >>> > a protocol within a broker, users can
> > define
> > >> >> new
> > >> >> >> >> >> protocol
> > >> >> >> >> >> >> > names
> > >> >> >> >> >> >> > > > > which
> > >> >> >> >> >> >> > > > > > >>> are
> > >> >> >> >> >> >> > > > > > >>> > configured versions of existing
> > protocols,
> > >> >> perhaps
> > >> >> >> >> using
> > >> >> >> >> >> >> just
> > >> >> >> >> >> >> > > > > > >>> > configuration
> > >> >> >> >> >> >> > > > > > >>> > entries and no additional code.
> > >> >> >> >> >> >> > > > > > >>> >
> > >> >> >> >> >> >> > > > > > >>> > For example:
> > >> >> >> >> >> >> > > > > > >>> >
> > >> >> >> >> >> >> > > > > > >>> > A single mechanism broker would be
> > >> configured
> > >> >> as:
> > >> >> >> >> >> >> > > > > > >>> >
> > >> >> >> >> >> >> > > > > > >>> > listeners=SASL_SSL://:9092
> > >> >> >> >> >> >> > > > > > >>> > sasl.mechanism=GSSAPI
> > >> >> >> >> >> >> > > > > > >>> > sasl.kerberos.class.name=kafka
> > >> >> >> >> >> >> > > > > > >>> > ...
> > >> >> >> >> >> >> > > > > > >>> >
> > >> >> >> >> >> >> > > > > > >>> >
> > >> >> >> >> >> >> > > > > > >>> > And a multi-mechanism broker would be
> > >> >> configured
> > >> >> >> as:
> > >> >> >> >> >> >> > > > > > >>> >
> > >> >> >> >> >> >> > > > > > >>> >
> > >> >> >> listeners=gssapi://:9092,plain://:9093,custom://:9094
> > >> >> >> >> >> >> > > > > > >>> > gssapi.security.protocol=SASL_SSL
> > >> >> >> >> >> >> > > > > > >>> > gssapi.sasl.mechanism=GSSAPI
> > >> >> >> >> >> >> > > > > > >>> > gssapi.sasl.kerberos.class.name=kafka
> > >> >> >> >> >> >> > > > > > >>> > ...
> > >> >> >> >> >> >> > > > > > >>> > plain.security.protocol=SASL_SSL
> > >> >> >> >> >> >> > > > > > >>> > plain.sasl.mechanism=PLAIN
> > >> >> >> >> >> >> > > > > > >>> > ..
> > >> >> >> >> >> >> > > > > > >>> > custom.security.protocol=SASL_PLAINTEXT
> > >> >> >> >> >> >> > > > > > >>> > custom.sasl.mechanism=CUSTOM
> > >> >> >> >> >> >> > > > > > >>> >
> > >> >> >> >> >> >> > >
> > >> >> >> custom.sasl.callback.handler.class=example.CustomCallbackHandler
> > >> >> >> >> >> >> > > > > > >>> >
> > >> >> >> >> >> >> > > > > > >>> >
> > >> >> >> >> >> >> > > > > > >>> >
> > >> >> >> >> >> >> > > > > > >>> > This is still a big change because it
> > >> affects
> > >> >> the
> > >> >> >> >> >> currently
> > >> >> >> >> >> >> > > fixed
> > >> >> >> >> >> >> > > > > > >>> > enumeration of security protocol
> > >> definitions,
> > >> >> but
> > >> >> >> one
> > >> >> >> >> >> that
> > >> >> >> >> >> >> is
> > >> >> >> >> >> >> > > > > perhaps
> > >> >> >> >> >> >> > > > > > >>> > more
> > >> >> >> >> >> >> > > > > > >>> > flexible than defining every new SASL
> > >> mechanism
> > >> >> >> as a
> > >> >> >> >> new
> > >> >> >> >> >> >> > > security
> > >> >> >> >> >> >> > > > > > >>> > protocol.
> > >> >> >> >> >> >> > > > > > >>> >
> > >> >> >> >> >> >> > > > > > >>> > Thoughts?
> > >> >> >> >> >> >> > > > > > >>> >
> > >> >> >> >> >> >> > > > > > >>> >
> > >> >> >> >> >> >> > > > > > >>> > On Tue, Feb 2, 2016 at 12:20 PM, Rajini
> > >> >> Sivaram <
> > >> >> >> >> >> >> > > > > > >>> > rajinisiva...@googlemail.com> wrote:
> > >> >> >> >> >> >> > > > > > >>> >
> > >> >> >> >> >> >> > > > > > >>> > > As Ismael has said, we do not have a
> > >> >> >> requirement to
> > >> >> >> >> >> >> support
> > >> >> >> >> >> >> > > > > multiple
> > >> >> >> >> >> >> > > > > > >>> > > protocols in a broker. But I agree with
> > >> Jun's
> > >> >> >> >> >> observation
> > >> >> >> >> >> >> > > that
> > >> >> >> >> >> >> > > > > some
> > >> >> >> >> >> >> > > > > > >>> > > companies might want to support a
> > >> different
> > >> >> >> >> >> >> authentication
> > >> >> >> >> >> >> > > > > mechanism
> > >> >> >> >> >> >> > > > > > >>> for
> > >> >> >> >> >> >> > > > > > >>> > > internal users or partners. For
> > instance,
> > >> we
> > >> >> do
> > >> >> >> use
> > >> >> >> >> >> two
> > >> >> >> >> >> >> > > > different
> > >> >> >> >> >> >> > > > > > >>> > > authentication mechanisms, it just so
> > >> happens
> > >> >> >> that
> > >> >> >> >> we
> > >> >> >> >> >> are
> > >> >> >> >> >> >> > > able
> > >> >> >> >> >> >> > > > > to use
> > >> >> >> >> >> >> > > > > > >>> > > certificate-based authentication for
> > >> internal
> > >> >> >> >> users,
> > >> >> >> >> >> and
> > >> >> >> >> >> >> > > hence
> > >> >> >> >> >> >> > > > > don't
> > >> >> >> >> >> >> > > > > > >>> > > require multiple SASL mechanisms in a
> > >> broker.
> > >> >> >> >> >> >> > > > > > >>> > >
> > >> >> >> >> >> >> > > > > > >>> > > As Tao has pointed out, mechanism
> > >> negotiation
> > >> >> >> is a
> > >> >> >> >> >> common
> > >> >> >> >> >> >> > > usage
> > >> >> >> >> >> >> > > > > > >>> pattern.
> > >> >> >> >> >> >> > > > > > >>> > > Many existing protocols that support
> > SASL
> > >> do
> > >> >> >> >> already
> > >> >> >> >> >> use
> > >> >> >> >> >> >> > this
> > >> >> >> >> >> >> > > > > > >>> pattern. AMQP
> > >> >> >> >> >> >> > > > > > >>> > > (
> > >> >> >> >> >> >> > > > > > >>> > >
> > >> >> >> >> >> >> > > > > > >>>
> > >> >> >> >> >> >> > > > >
> > >> >> >> >> >> >> > > >
> > >> >> >> >> >> >> > >
> > >> >> >> >> >> >> >
> > >> >> >> >> >> >>
> > >> >> >> >> >>
> > >> >> >> >>
> > >> >> >>
> > >> >>
> > >>
> > http://docs.oasis-open.org/amqp/core/v1.0/os/amqp-core-security-v1.0-os.html#type-sasl-mechanisms
> > >> >> >> >> >> >> > > > > > >>> ),
> > >> >> >> >> >> >> > > > > > >>> > > which, as a messaging protocol maybe
> > >> closer
> > >> >> to
> > >> >> >> >> Kafka
> > >> >> >> >> >> in
> > >> >> >> >> >> >> use
> > >> >> >> >> >> >> > > > cases
> > >> >> >> >> >> >> > > > > > >>> than
> > >> >> >> >> >> >> > > > > > >>> > > Zookeeper, is an example. Other
> > examples
> > >> >> where
> > >> >> >> the
> > >> >> >> >> >> client
> > >> >> >> >> >> >> > > > > negotiates
> > >> >> >> >> >> >> > > > > > >>> or
> > >> >> >> >> >> >> > > > > > >>> > > sends SASL mechanism to server include
> > >> ACAP
> > >> >> >> that is
> > >> >> >> >> >> used
> > >> >> >> >> >> >> as
> > >> >> >> >> >> >> > > an
> > >> >> >> >> >> >> > > > > > >>> example in
> > >> >> >> >> >> >> > > > > > >>> > > the SASL RFCs, POP3, LDAP, SMTP etc.
> > This
> > >> is
> > >> >> >> not to
> > >> >> >> >> >> say
> > >> >> >> >> >> >> > that
> > >> >> >> >> >> >> > > > > Kafka
> > >> >> >> >> >> >> > > > > > >>> > > shouldn't use a different type of
> > >> mechanism
> > >> >> >> >> selection
> > >> >> >> >> >> >> that
> > >> >> >> >> >> >> > > fits
> > >> >> >> >> >> >> > > > > > >>> better with
> > >> >> >> >> >> >> > > > > > >>> > > the existing Kafka design. Just that
> > >> >> negotiation
> > >> >> >> >> is a
> > >> >> >> >> >> >> > common
> > >> >> >> >> >> >> > > > > pattern
> > >> >> >> >> >> >> > > > > > >>> and
> > >> >> >> >> >> >> > > > > > >>> > > since we typically turn on
> > >> javax.net.debug to
> > >> >> >> debug
> > >> >> >> >> >> TLS
> > >> >> >> >> >> >> > > > > negotiation
> > >> >> >> >> >> >> > > > > > >>> issues,
> > >> >> >> >> >> >> > > > > > >>> > > having to use Kafka logging to debug
> > SASL
> > >> >> >> >> negotiation
> > >> >> >> >> >> >> > issues
> > >> >> >> >> >> >> > > is
> > >> >> >> >> >> >> > > > > not
> > >> >> >> >> >> >> > > > > > >>> that
> > >> >> >> >> >> >> > > > > > >>> > > dissimilar.
> > >> >> >> >> >> >> > > > > > >>> > >
> > >> >> >> >> >> >> > > > > > >>> > >
> > >> >> >> >> >> >> > > > > > >>> > > On Tue, Feb 2, 2016 at 6:12 AM, tao
> > xiao <
> > >> >> >> >> >> >> > > xiaotao...@gmail.com
> > >> >> >> >> >> >> > > > >
> > >> >> >> >> >> >> > > > > > >>> wrote:
> > >> >> >> >> >> >> > > > > > >>> > >
> > >> >> >> >> >> >> > > > > > >>> > >> I am the author of KIP-44. I hope my
> > use
> > >> >> case
> > >> >> >> will
> > >> >> >> >> >> add
> > >> >> >> >> >> >> > some
> > >> >> >> >> >> >> > > > > values
> > >> >> >> >> >> >> > > > > > >>> to this
> > >> >> >> >> >> >> > > > > > >>> > >> discussion. The reason I raised KIP44
> > is
> > >> >> that I
> > >> >> >> >> want
> > >> >> >> >> >> to
> > >> >> >> >> >> >> be
> > >> >> >> >> >> >> > > > able
> > >> >> >> >> >> >> > > > > to
> > >> >> >> >> >> >> > > > > > >>> > >> implement a custom security protocol
> > that
> > >> >> can
> > >> >> >> >> fulfill
> > >> >> >> >> >> >> the
> > >> >> >> >> >> >> > > need
> > >> >> >> >> >> >> > > > > of my
> > >> >> >> >> >> >> > > > > > >>> > >> company. As pointed out by Ismael
> > KIP-43
> > >> now
> > >> >> >> >> >> supports a
> > >> >> >> >> >> >> > > > > pluggable
> > >> >> >> >> >> >> > > > > > >>> way to
> > >> >> >> >> >> >> > > > > > >>> > >> inject custom security provider to
> > SASL I
> > >> >> think
> > >> >> >> >> it is
> > >> >> >> >> >> >> > enough
> > >> >> >> >> >> >> > > > to
> > >> >> >> >> >> >> > > > > > >>> cover the
> > >> >> >> >> >> >> > > > > > >>> > >> use case I have and address the
> > concerns
> > >> >> >> raised in
> > >> >> >> >> >> >> KIP-44.
> > >> >> >> >> >> >> > > > > > >>> > >>
> > >> >> >> >> >> >> > > > > > >>> > >> For multiple security protocols
> > support
> > >> >> >> >> >> simultaneously
> > >> >> >> >> >> >> it
> > >> >> >> >> >> >> > is
> > >> >> >> >> >> >> > > > not
> > >> >> >> >> >> >> > > > > > >>> needed in
> > >> >> >> >> >> >> > > > > > >>> > >> my use case and I don't foresee it is
> > >> >> needed in
> > >> >> >> >> the
> > >> >> >> >> >> >> future
> > >> >> >> >> >> >> > > but
> > >> >> >> >> >> >> > > > > as i
> > >> >> >> >> >> >> > > > > > >>> said
> > >> >> >> >> >> >> > > > > > >>> > >> this is my use case only there may be
> > >> other
> > >> >> use
> > >> >> >> >> cases
> > >> >> >> >> >> >> that
> > >> >> >> >> >> >> > > > need
> > >> >> >> >> >> >> > > > > it.
> > >> >> >> >> >> >> > > > > > >>> But if
> > >> >> >> >> >> >> > > > > > >>> > >> we want to support it in the future I
> > >> >> prefer to
> > >> >> >> >> get
> > >> >> >> >> >> it
> > >> >> >> >> >> >> > right
> > >> >> >> >> >> >> > > > at
> > >> >> >> >> >> >> > > > > the
> > >> >> >> >> >> >> > > > > > >>> first
> > >> >> >> >> >> >> > > > > > >>> > >> place given the fact that security
> > >> protocol
> > >> >> is
> > >> >> >> an
> > >> >> >> >> >> ENUM
> > >> >> >> >> >> >> and
> > >> >> >> >> >> >> > > if
> > >> >> >> >> >> >> > > > we
> > >> >> >> >> >> >> > > > > > >>> stick to
> > >> >> >> >> >> >> > > > > > >>> > >> that implementation it is very hard to
> > >> >> extend
> > >> >> >> in
> > >> >> >> >> the
> > >> >> >> >> >> >> > future
> > >> >> >> >> >> >> > > > > when we
> > >> >> >> >> >> >> > > > > > >>> decide
> > >> >> >> >> >> >> > > > > > >>> > >> multiple security protocols is needed.
> > >> >> >> >> >> >> > > > > > >>> > >>
> > >> >> >> >> >> >> > > > > > >>> > >> Protocol negotiation is a very common
> > >> usage
> > >> >> >> >> pattern
> > >> >> >> >> >> in
> > >> >> >> >> >> >> > > > security
> > >> >> >> >> >> >> > > > > > >>> domain. As
> > >> >> >> >> >> >> > > > > > >>> > >> suggested in Java SASL doc
> > >> >> >> >> >> >> > > > > > >>> > >>
> > >> >> >> >> >> >> > > > > > >>> > >>
> > >> >> >> >> >> >> > > > > > >>>
> > >> >> >> >> >> >> > > > >
> > >> >> >> >> >> >> > > >
> > >> >> >> >> >> >> > >
> > >> >> >> >> >> >> >
> > >> >> >> >> >> >>
> > >> >> >> >> >>
> > >> >> >> >>
> > >> >> >>
> > >> >>
> > >>
> > http://docs.oracle.com/javase/7/docs/technotes/guides/security/sasl/sasl-refguide.html
> > >> >> >> >> >> >> > > > > > >>> > >> client
> > >> >> >> >> >> >> > > > > > >>> > >> first sends out a packet to server and
> > >> >> server
> > >> >> >> >> >> responds
> > >> >> >> >> >> >> > with
> > >> >> >> >> >> >> > > a
> > >> >> >> >> >> >> > > > > list
> > >> >> >> >> >> >> > > > > > >>> of
> > >> >> >> >> >> >> > > > > > >>> > >> mechanisms it supports. This is very
> > >> >> similar to
> > >> >> >> >> >> SSL/TLS
> > >> >> >> >> >> >> > > > > negotiation.
> > >> >> >> >> >> >> > > > > > >>> > >>
> > >> >> >> >> >> >> > > > > > >>> > >> On Tue, 2 Feb 2016 at 06:39 Ismael
> > Juma <
> > >> >> >> >> >> >> > ism...@juma.me.uk>
> > >> >> >> >> >> >> > > > > wrote:
> > >> >> >> >> >> >> > > > > > >>> > >>
> > >> >> >> >> >> >> > > > > > >>> > >> > On Mon, Feb 1, 2016 at 7:04 PM, Gwen
> > >> >> Shapira
> > >> >> >> <
> > >> >> >> >> >> >> > > > > g...@confluent.io>
> > >> >> >> >> >> >> > > > > > >>> wrote:
> > >> >> >> >> >> >> > > > > > >>> > >> >
> > >> >> >> >> >> >> > > > > > >>> > >> > > Looking at "existing solutions",
> > it
> > >> >> looks
> > >> >> >> like
> > >> >> >> >> >> >> > Zookeeper
> > >> >> >> >> >> >> > > > > allows
> > >> >> >> >> >> >> > > > > > >>> > >> plugging
> > >> >> >> >> >> >> > > > > > >>> > >> > in
> > >> >> >> >> >> >> > > > > > >>> > >> > > any SASL mechanism, but the server
> > >> will
> > >> >> >> only
> > >> >> >> >> >> support
> > >> >> >> >> >> >> > one
> > >> >> >> >> >> >> > > > > > >>> mechanism at
> > >> >> >> >> >> >> > > > > > >>> > >> a
> > >> >> >> >> >> >> > > > > > >>> > >> > > time.
> > >> >> >> >> >> >> > > > > > >>> > >> > >
> > >> >> >> >> >> >> > > > > > >>> > >> >
> > >> >> >> >> >> >> > > > > > >>> > >> > This was the original proposal from
> > >> >> Rajini as
> > >> >> >> >> that
> > >> >> >> >> >> is
> > >> >> >> >> >> >> > > enough
> > >> >> >> >> >> >> > > > > for
> > >> >> >> >> >> >> > > > > > >>> their
> > >> >> >> >> >> >> > > > > > >>> > >> > needs.
> > >> >> >> >> >> >> > > > > > >>> > >> >
> > >> >> >> >> >> >> > > > > > >>> > >> >
> > >> >> >> >> >> >> > > > > > >>> > >> > > If this is good enough for our
> > >> use-case
> > >> >> >> (do we
> > >> >> >> >> >> >> > actually
> > >> >> >> >> >> >> > > > > need to
> > >> >> >> >> >> >> > > > > > >>> > >> support
> > >> >> >> >> >> >> > > > > > >>> > >> > > multiple mechanisms at once?), it
> > >> will
> > >> >> >> >> simplify
> > >> >> >> >> >> >> life a
> > >> >> >> >> >> >> > > lot
> > >> >> >> >> >> >> > > > > for
> > >> >> >> >> >> >> > > > > > >>> us (
> > >> >> >> >> >> >> > > > > > >>> > >> > >
> > >> >> >> >> >> >> > > > > > >>> > >>
> > >> >> >> >> >> >> > > > > > >>>
> > >> >> >> >> >> >> > > > >
> > >> >> >> >> >> >> > >
> > >> >> >> >> >> >>
> > >> >> >> >> >>
> > >> >> >> >>
> > >> >> >>
> > >> >>
> > >>
> > https://cwiki.apache.org/confluence/display/ZOOKEEPER/Zookeeper+and+SASL
> > >> >> >> >> >> >> > > > > > >>> > >> > )
> > >> >> >> >> >> >> > > > > > >>> > >> > >
> > >> >> >> >> >> >> > > > > > >>> > >> >
> > >> >> >> >> >> >> > > > > > >>> > >> > The current thinking is that it
> > would
> > >> be
> > >> >> >> useful
> > >> >> >> >> to
> > >> >> >> >> >> >> > support
> > >> >> >> >> >> >> > > > > > >>> multiple SASL
> > >> >> >> >> >> >> > > > > > >>> > >> > mechanisms simultaneously. In the
> > KIP
> > >> >> >> meeting,
> > >> >> >> >> Jun
> > >> >> >> >> >> >> > > mentioned
> > >> >> >> >> >> >> > > > > that
> > >> >> >> >> >> >> > > > > > >>> > >> companies
> > >> >> >> >> >> >> > > > > > >>> > >> > sometimes support additional
> > >> >> authentication
> > >> >> >> >> >> mechanisms
> > >> >> >> >> >> >> > for
> > >> >> >> >> >> >> > > > > > >>> partners, for
> > >> >> >> >> >> >> > > > > > >>> > >> > example. It does make things more
> > >> >> complex, as
> > >> >> >> >> you
> > >> >> >> >> >> say,
> > >> >> >> >> >> >> > so
> > >> >> >> >> >> >> > > we
> > >> >> >> >> >> >> > > > > need
> > >> >> >> >> >> >> > > > > > >>> to be
> > >> >> >> >> >> >> > > > > > >>> > >> > sure the complexity is worth it.
> > >> >> >> >> >> >> > > > > > >>> > >> >
> > >> >> >> >> >> >> > > > > > >>> > >> > Two more points:
> > >> >> >> >> >> >> > > > > > >>> > >> >
> > >> >> >> >> >> >> > > > > > >>> > >> > 1. It has been suggested that custom
> > >> >> security
> > >> >> >> >> >> protocol
> > >> >> >> >> >> >> > > > > support is
> > >> >> >> >> >> >> > > > > > >>> > >> needed by
> > >> >> >> >> >> >> > > > > > >>> > >> > some (KIP-44). Rajini enhanced
> > KIP-43
> > >> so
> > >> >> >> that a
> > >> >> >> >> >> SASL
> > >> >> >> >> >> >> > > > mechanism
> > >> >> >> >> >> >> > > > > > >>> with a
> > >> >> >> >> >> >> > > > > > >>> > >> > custom provider can be used for this
> > >> >> purpose
> > >> >> >> >> >> instead.
> > >> >> >> >> >> >> > > Given
> > >> >> >> >> >> >> > > > > this,
> > >> >> >> >> >> >> > > > > > >>> it
> > >> >> >> >> >> >> > > > > > >>> > >> seems
> > >> >> >> >> >> >> > > > > > >>> > >> > a bit inconsistent and restrictive
> > not
> > >> to
> > >> >> >> allow
> > >> >> >> >> >> >> multiple
> > >> >> >> >> >> >> > > > SASL
> > >> >> >> >> >> >> > > > > > >>> mechanisms
> > >> >> >> >> >> >> > > > > > >>> > >> > simultaneously (we do allow SSL and
> > >> SASL
> > >> >> >> >> >> >> authentication
> > >> >> >> >> >> >> > > > > > >>> simultaneously,
> > >> >> >> >> >> >> > > > > > >>> > >> > after all).
> > >> >> >> >> >> >> > > > > > >>> > >> >
> > >> >> >> >> >> >> > > > > > >>> > >> > 2. The other option would be to
> > >> support a
> > >> >> >> single
> > >> >> >> >> >> SASL
> > >> >> >> >> >> >> > > > > mechanism
> > >> >> >> >> >> >> > > > > > >>> > >> > simultaneously to start with and
> > then
> > >> >> extend
> > >> >> >> >> this
> > >> >> >> >> >> to
> > >> >> >> >> >> >> > > > multiple
> > >> >> >> >> >> >> > > > > > >>> mechanisms
> > >> >> >> >> >> >> > > > > > >>> > >> > simultaneously later (if and when
> > >> >> needed). It
> > >> >> >> >> seems
> > >> >> >> >> >> >> like
> > >> >> >> >> >> >> > > it
> > >> >> >> >> >> >> > > > > would
> > >> >> >> >> >> >> > > > > > >>> be
> > >> >> >> >> >> >> > > > > > >>> > >> harder
> > >> >> >> >> >> >> > > > > > >>> > >> > to support the latter in the future
> > if
> > >> we
> > >> >> go
> > >> >> >> >> down
> > >> >> >> >> >> this
> > >> >> >> >> >> >> > > > route,
> > >> >> >> >> >> >> > > > > but
> > >> >> >> >> >> >> > > > > > >>> maybe
> > >> >> >> >> >> >> > > > > > >>> > >> > there are ways around this.
> > >> >> >> >> >> >> > > > > > >>> > >> >
> > >> >> >> >> >> >> > > > > > >>> > >> > Thoughts?
> > >> >> >> >> >> >> > > > > > >>> > >> >
> > >> >> >> >> >> >> > > > > > >>> > >> > Ismael
> > >> >> >> >> >> >> > > > > > >>> > >> >
> > >> >> >> >> >> >> > > > > > >>> > >>
> > >> >> >> >> >> >> > > > > > >>> > >
> > >> >> >> >> >> >> > > > > > >>> > >
> > >> >> >> >> >> >> > > > > > >>> > >
> > >> >> >> >> >> >> > > > > > >>> > > --
> > >> >> >> >> >> >> > > > > > >>> > > Regards,
> > >> >> >> >> >> >> > > > > > >>> > >
> > >> >> >> >> >> >> > > > > > >>> > > Rajini
> > >> >> >> >> >> >> > > > > > >>> > >
> > >> >> >> >> >> >> > > > > > >>> >
> > >> >> >> >> >> >> > > > > > >>> >
> > >> >> >> >> >> >> > > > > > >>> >
> > >> >> >> >> >> >> > > > > > >>> > --
> > >> >> >> >> >> >> > > > > > >>> > Regards,
> > >> >> >> >> >> >> > > > > > >>> >
> > >> >> >> >> >> >> > > > > > >>> > Rajini
> > >> >> >> >> >> >> > > > > > >>>
> > >> >> >> >> >> >> > > > > > >>
> > >> >> >> >> >> >> > > > > > >>
> > >> >> >> >> >> >> > > > > > >>
> > >> >> >> >> >> >> > > > > > >> --
> > >> >> >> >> >> >> > > > > > >> Regards,
> > >> >> >> >> >> >> > > > > > >>
> > >> >> >> >> >> >> > > > > > >> Rajini
> > >> >> >> >> >> >> > > > > > >>
> > >> >> >> >> >> >> > > > > > >
> > >> >> >> >> >> >> > > > > > >
> > >> >> >> >> >> >> > > > > > >
> > >> >> >> >> >> >> > > > > > > --
> > >> >> >> >> >> >> > > > > > > Regards,
> > >> >> >> >> >> >> > > > > > >
> > >> >> >> >> >> >> > > > > > > Rajini
> > >> >> >> >> >> >> > > > > > >
> > >> >> >> >> >> >> > > > > >
> > >> >> >> >> >> >> > > > > >
> > >> >> >> >> >> >> > > > > >
> > >> >> >> >> >> >> > > > > > --
> > >> >> >> >> >> >> > > > > > Regards,
> > >> >> >> >> >> >> > > > > >
> > >> >> >> >> >> >> > > > > > Rajini
> > >> >> >> >> >> >> > > > >
> > >> >> >> >> >> >> > > >
> > >> >> >> >> >> >> > > >
> > >> >> >> >> >> >> > > >
> > >> >> >> >> >> >> > > > --
> > >> >> >> >> >> >> > > > Regards,
> > >> >> >> >> >> >> > > >
> > >> >> >> >> >> >> > > > Rajini
> > >> >> >> >> >> >> > > >
> > >> >> >> >> >> >> > >
> > >> >> >> >> >> >> >
> > >> >> >> >> >> >> >
> > >> >> >> >> >> >> >
> > >> >> >> >> >> >> > --
> > >> >> >> >> >> >> > Regards,
> > >> >> >> >> >> >> >
> > >> >> >> >> >> >> > Rajini
> > >> >> >> >> >> >> >
> > >> >> >> >> >> >>
> > >> >> >> >> >> >
> > >> >> >> >> >> >
> > >> >> >> >> >> >
> > >> >> >> >> >> > --
> > >> >> >> >> >> > Regards,
> > >> >> >> >> >> >
> > >> >> >> >> >> > Rajini
> > >> >> >> >> >>
> > >> >> >> >> >
> > >> >> >> >> >
> > >> >> >> >> >
> > >> >> >> >> > --
> > >> >> >> >> > Regards,
> > >> >> >> >> >
> > >> >> >> >> > Rajini
> > >> >> >> >>
> > >> >> >> >
> > >> >> >> >
> > >> >> >> >
> > >> >> >> > --
> > >> >> >> > Regards,
> > >> >> >> >
> > >> >> >> > Rajini
> > >> >> >>
> > >> >> >
> > >> >> >
> > >> >> >
> > >> >> > --
> > >> >> > Regards,
> > >> >> >
> > >> >> > Rajini
> > >> >>
> > >> >
> > >> >
> > >> >
> > >> > --
> > >> > Regards,
> > >> >
> > >> > Rajini
> > >>
> > >>
> > >
> > >
> > > --
> > > Regards,
> > >
> > > Rajini
> >
> >
> 
> 
> -- 
> Regards,
> 
> Rajini

Reply via email to