Hey Ron,

Come to think of it, I think what Rajini said makes more sense than my
initial proposal. Having the OAuthBearerClientCallbackHandler populate
SaslExtensionsCallback by taking a Map from the Subject would ease users'
implementation - they'd only have to provide a login callback handler which
attaches extensions to the Subject.
I will now update the PR and the examples in the KIP. Let me know what you
think

Hi Rajini,
Yes, I will switch both classes to private/public as it makes total sense.

Best,
Stanislav
On Thu, Jul 19, 2018 at 9:02 AM Rajini Sivaram <rajinisiva...@gmail.com>
wrote:

> Hi Stanislav,
>
> Thanks for the KIP. Since SaslExtensions will be an internal class, can we
> remove it from the KIP to avoid confusion? Also, can we add the package
> name for SaslExtensionsCallback? The PR has it in
> org.apache.kafka.common.security which is an internal package. As a public
> class, it could be in org.apache.kafka.common.security.auth.
>
> Regards,
>
> Rajini
>
> On Thu, Jul 19, 2018 at 4:50 PM, Rajini Sivaram <rajinisiva...@gmail.com>
> wrote:
>
> > Hi Ron,
> >
> > Is there a reason why wouldn't want to provide extensions using a login
> > callback handler in the same way as we inject tokens? The easiest way to
> > inject custom extensions would be using the JAAS config. So we could have
> > both OAuthBearerTokenCallback and SaslExtensionsCallback  processed by a
> > login callback handler. And the map returned by SaslExtensionsCallback
> > could be added to Subject by the default
> OAuthBearerSaslClientCallbackHandler.
> > Since OAuth users have to provide a login callback handler anyway,
> wouldn't
> > it be a better fit?
> >
> > Thank you,
> >
> > Rajini
> >
> >
> > On Thu, Jul 19, 2018 at 4:08 PM, Ron Dagostino <rndg...@gmail.com>
> wrote:
> >
> >> Hi Stanislav.
> >>
> >> Implementers of a custom sasl.client.callback.handler.class must be sure
> >> to
> >> provide the existing logic in
> >> org.apache.kafka.common.security.oauthbearer.internals.OAuth
> >> BearerSaslClientCallbackHandler
> >> that handles instances of OAuthBearerTokenCallback (by retrieving the
> >> private credential from the Subject); a custom implementation that fails
> >> to
> >> do this will not work, so the KIP should state this requirement.
> >>
> >> The question then arises: how should implementers provide the existing
> >> logic in the OAuthBearerSaslClientCallbackHandler class?  That class is
> >> not
> >> part of the public API, and its handleCallback(OAuthBearerTokenCallback)
> >> method, which implements the logic, is private anyway (so even if
> someone
> >> took the risk of extending the non-API class the method would generally
> >> not
> >> be available in the subclass).  So as it stands right now implementers
> are
> >> left to copy/paste that logic into their code.  A better solution might
> be
> >> to have the private method in OAuthBearerSaslClientCallbackHandler
> >> invoke a
> >> public static method on the
> >> org.apache.kafka.common.security.oauthbearer.OAuthBearerLoginModule
> class
> >> (which is part of the public API) to retrieve the credential (e.g.
> public
> >> static OAuthBearerToken retrieveCredential(Subject)) .  The commit()
> >> method
> >> of the OAuthBearerLoginModule class is what puts the credential there in
> >> the first place, so it could make sense for the class to expose the
> >> complementary logic for retrieving the credential in this way.
> Regarding
> >> your question about plugability of LoginModules, yes, the LoginModule
> >> class
> >> is explicitly stated in the JAAS config, so it is indeed pluggable; an
> >> extending class would override the commit() method, call super.commit(),
> >> and if the return value is true it would do whatever is necessary to add
> >> the desired SASL extensions to the Subject -- probably in the public
> >> credentials -- where a custom sasl.client.callback.handler.class would
> be
> >> able to find them.  The KIP might state this, too.
> >>
> >> I'll look forward to seeing a new PR once the fix for the 0x01 separator
> >> issue in the SASL/OAUTHBEARER implementation (KAFKA-7182
> >> <https://issues.apache.org/jira/projects/KAFKA/issues/KAFKA-7182>) is
> >> merged.
> >>
> >> Ron
> >>
> >> On Wed, Jul 18, 2018 at 6:38 PM Stanislav Kozlovski <
> >> stanis...@confluent.io>
> >> wrote:
> >>
> >> > Hey Ron,
> >> >
> >> > You brought up some great points. I did my best to address them and
> >> updated
> >> > the KIP.
> >> >
> >> > I should mention that I used commas to separate extensions in the
> >> protocol,
> >> > because we did not use the recommended Control-A character for
> >> separators
> >> > in the OAuth message and I figured I would not change it.
> >> > Now that I saw your PR about implementing the proper separators in
> OAUTH
> >> > <https://github.com/apache/kafka/pull/5391> and will change my
> >> > implementation once yours gets merged, meaning commas will be a
> >> supported
> >> > value for extensions.
> >> >
> >> > About the implementation: yes you're right, you should define `
> >> > sasl.client.callback.handler.class` which has the same functionality
> >> as `
> >> > OAuthBearerSaslClientCallbackHandler` plus the additional
> >> functionality of
> >> > handling the `SaslExtensionsCallback` by attaching extensions to it.
> >> > The only reason you'd populate the `Subject` object with the
> extensions
> >> is
> >> > if you used the default `SaslClientCallbackHandler` (which handles the
> >> > extensions callback by adding whatever's in the subject), as the SCRAM
> >> > authentication does.
> >> >
> >> > https://github.com/stanislavkozlovski/kafka/blob/KAFKA-7169-
> >> custom-sasl-extensions/clients/src/main/java/org/
> >> apache/kafka/common/security/oauthbearer/internals/OAuthBea
> >> rerSaslClient.java#L92
> >> > And yes, in that case you would need a custom `LoginModule` which
> >> populates
> >> > the Subject in that case, although I'm not sure if Kafka supports
> >> pluggable
> >> > LoginModules. Does it?
> >> >
> >> > Best,
> >> > Stanislav
> >> >
> >> > On Wed, Jul 18, 2018 at 9:50 AM Ron Dagostino <rndg...@gmail.com>
> >> wrote:
> >> >
> >> > > Hi Stanislav.  Could you add something to the KIP about the security
> >> > > implications related to the CSV name/value pairs sent in the
> >> extension?
> >> > > For example, the OAuth access token may have a digital signature,
> but
> >> the
> >> > > extensions generally will not (unless one of the values is a JWS
> >> compact
> >> > > serialization, but I doubt anyone would go that far), so the server
> >> > > generally cannot trust the extensions to be accurate for anything
> >> > > critical.  You mentioned the "better tracing and troubleshooting"
> use
> >> > case,
> >> > > which I think is fine despite the lack of security; given that lack
> of
> >> > > security, though, I believe it is important to also state what the
> >> > > extensions should *not* be used for.
> >> > >
> >> > > Also, could you indicate in the KIP how the extensions might
> actually
> >> be
> >> > > added?  My take on that would be to extend OAuthBearerLoginModule to
> >> > > override the initialize() and commit() methods so that the derived
> >> class
> >> > > would have access to the Subject instance and could add a map to the
> >> > > subject's public or private credentials when the commit succeeds;
> >> then I
> >> > > think the sasl.client.callback.handler.class would have to be
> >> explicitly
> >> > > set to a class that extends the default implementation
> >> > > (OAuthBearerSaslClientCallbackHandler) and retrieves the map when
> >> > handling
> >> > > the SaslExtensionsCallback.  But maybe you are thinking about it
> >> > > differently?  Some guidance on how to actually take advantage of the
> >> > > feature via an implementation would be a useful addition to the KIP.
> >> > >
> >> > > Finally, I note that the extension parsing does not support a comma
> in
> >> > keys
> >> > > or values.  This should be addressed somehow -- either by supporting
> >> via
> >> > an
> >> > > escaping mechanism or by explicitly acknowledging that it is
> >> unsupported.
> >> > >
> >> > > Thanks for the KIP and the simultaneous PR -- having both at the
> same
> >> > time
> >> > > really helped.
> >> > >
> >> > > Ron
> >> > >
> >> > > On Tue, Jul 17, 2018 at 6:22 PM Stanislav Kozlovski <
> >> > > stanis...@confluent.io>
> >> > > wrote:
> >> > >
> >> > > > Hey group,
> >> > > >
> >> > > > I just created a new KIP about adding customizable SASL extensions
> >> to
> >> > the
> >> > > > OAuthBearer authentication mechanism. More details in the proposal
> >> > > >
> >> > > > KIP:
> >> > > >
> >> > > >
> >> > >
> >> > https://cwiki.apache.org/confluence/display/KAFKA/KIP-342%
> >> 3A+Add+support+for+Custom+SASL+extensions+in+OAuthBearer+authentication
> >> > > > JIRA: KAFKA-7169 <
> https://issues.apache.org/jira/browse/KAFKA-7169>
> >> > > > PR: Pull request <https://github.com/apache/kafka/pull/5379>
> >> > > >
> >> > > > --
> >> > > > Best,
> >> > > > Stanislav
> >> > > >
> >> > >
> >> >
> >> >
> >> > --
> >> > Best,
> >> > Stanislav
> >> >
> >>
> >
> >
>


-- 
Best,
Stanislav

Reply via email to