Both the KIP and the PR have been updated to a cut-down version as discussed in the KIP meeting today.
Any feedback is appreciated. On Tue, Mar 15, 2016 at 7:39 PM, Rajini Sivaram < rajinisiva...@googlemail.com> wrote: > Following on from the discussions in the KIP meeting today, the suggestion > is to implement a cut-down version of KIP-43 for 0.10.0.0 with a follow-on > KIP after the release to address support for custom mechanisms. > > Changes to be removed from KIP-43: > > 1. Remove the configuration for CallbackHandler. The callback handler > implementation in Kafka will support Kerberos, PLAIN and Digest-MD5. It > will not support custom or more complex mechanisms which require additional > callbacks. > 2. Remove the configuration for Login. The Login implementation in > Kafka will support Kerberos and any other mechanism (PLAIN, Digest-MD5 etc) > that doesn't require functionality like token refresh. > > Changes included in KIP-43: > > 1. Configurable mechanism > 2. Support for multiple mechanisms in the broker > 3. Implementation of SASL/PLAIN > > If there are no objections to this, I can update the KIP and the PR by > tomorrow. And move the support for custom mechanisms into another KIP and > PR for review after the release of 0.10.0.0. > > > On Mon, Mar 14, 2016 at 7:48 AM, Rajini Sivaram < > rajinisiva...@googlemail.com> wrote: > >> Harsha, >> >> You are right, we don't expect to override callback handler or login for >> Digest-MD5. >> >> Pluggable CallbackHandler and Login modules enable custom SASL mechanisms >> to be implemented without modifying Kafka. For instance, it would enable >> KIP-44 ( >> https://cwiki.apache.org/confluence/display/KAFKA/KIP-44+-+Allow+Kafka+to+have+a+customized+security+protocol) >> to be implemented without making the whole security protocol pluggable. Tao >> Xiao has already confirmed earlier in this discussion thread that the >> proposed callback handler and login interfaces are suitable for their >> custom authentication. >> >> >> >> On Sun, Mar 13, 2016 at 6:59 PM, Harsha <ka...@harsha.io> wrote: >> >>> 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 >>> > > >> >> >> >> > >>> >> ... >> >> [Message clipped] > > > > > -- > Regards, > > Rajini > -- Regards, Rajini