Hi, Kirk,

Thanks for the reply.

JR1. If we have no clear usage, it's probably better to omit it. We could
always add a new param in the future if needed, right?

JR2. Could we document it? Also, when is FileJwtRetriever chosen?

Jun



On Tue, Apr 15, 2025 at 1:04 PM Kirk True <k...@kirktrue.pro> wrote:

> Hi Jun!
>
> I really appreciate your feedback.
>
> Responses below...
>
> On Fri, Apr 11, 2025, at 1:47 PM, Jun Rao wrote:
> > Hi, Kirk,
> >
> > Thanks for the KIP. A few comments below.
> >
> > JR1. OAuthBearerConfigurable.configure(): Could you describe the possible
> > values for saslMechanism? Is it always OAUTHBEARER?
>
> In this case, yes, it's always OAUTHBEARER. I wanted to keep the same
> signature in case there was a reason in the future that something else
> would be used. Maybe I'm trying to make it _too_ future-proof?
>
> > JR2. If sasl.oauthbearer.jwt.retriever.class is not configured, what
> other
> > configs lead to the selection of JwtBearerJwtRetriever?
>
> If sasl.oauthbearer.jwt.retriever.class is not configured, the default
> implementation (DefaultJwtRetriever) will use the
> sasl.oauthbearer.grant.type configuration to determine the implementation.
>
> If the grant type is "client_credentials" (the default),
> ClientCredentialsJwtRetriever will be used. If the grant type value is
> "urn:ietf:params:oauth:grant-type:jwt-bearer", then JwtBearerJwtRetriever
> is used.
>
> > JR3. If sasl.oauthbearer.jwt.validator.class is not configured, how do we
> > choose which built-in class to use?
>
> If sasl.oauthbearer.jwt.validator.class is not configured, the default
> implementation (DefaultJwtValidator) will use the presence of the existing
> sasl.oauthbearer.jwks.endpoint.url configuration to make the determination.
> If there is a value for sasl.oauthbearer.jwks.endpoint.url,
> BrokerJwtValidator will be used, otherwise ClientJwtValidator is used.
>
> I will make this more clear in the KIP.
>
> > JR4. Could we document what type can be returned for Object in the
> > following?
> > public interface AssertionJwtTemplate extends OAuthBearerConfigurable {
> >
> >     /**
> >      * Returns a map containing zero or more header values.
> >      *
> >      * @returns Values to include in the JWT header
> >      */
> >      Map<String, Object> header();
> >
> >     /**
> >      * Returns a map containing zero or more JWT payload claim values.
> >      *
> >      * @returns Values to include in the JWT payload
> >      */
> >      Map<String, Object> payload();
>
> JSON/JWT supports arbitrary data structures, so it's difficult to give a
> succinct list, but I will expound on this in the KIP.
>
> > JR5. "alg": RS256 : Should  RS256 be quoted?
>
> Yes. Thanks :)
>
> > JR6. "Step 2 is to create the JWT payload from the claims provided to
> > {@link #create(Map)}": The parameter for create() is not a Map.
>
> Thanks for pointing that out. They used to be maps, but now they're a
> little more involved.
>
> > JR7. For the new configuration table, could we document the type of each
> > new config?
>
> Good idea. I'll update the KIP.
>
> > JR8. Could we describe the format of sasl.oauthbearer.assertion.file?
>
> It's a serialized JWT, but I'll elaborate on that in the KIP for clarity.
>
> > JR9. sasl.oauthbearer.assertion.private.key.passphrase: In the "Mutually
> > exclusive configuration" part, it should say "If the
> > sasl.oauthbearer.assertion.file is used, this will be ignored.", right?
>
> Yes, we could ignore (or log) incompatible configuration instead of
> throwing an error. I'll double check the configuration to make sure the
> mutually exclusive ones are explained correctly.
>
> > JR10. sasl.oauthbearer.assertion.expiration.minutes and
> > sasl.oauthbearer.assertion.not.before.minutes: Why are they in minutes
> > instead of seconds?
>
> Simply because this design was based on a previous implementation that
> used minutes vs. seconds. I did find minute units odd, but there seemed to
> be precedent for it in offsets.retention.minutes and log.retention.minutes.
>
> JWT expiration being expressed in minutes is fairly typical from what I've
> seen in OAuth applications. However, using seconds (or even milliseconds)
> fits with Kafka convention better and may allow users sub-minute
> expiration, if desired.
>
> > JR11. "Two of the JAAS options (clientId and clientSecret) for the
> existing
> > client_credentials grant type are deprecated." Should we
> > include sasl.oauthbearer.scope too?
>
> Good catch. "scope" in the sasl.jaas.config configuration is deprecated in
> favor of the sasl.oauthbearer.scope configuration. I'll update the KIP.
>
> Thanks,
> Kirk
>
> > Thanks,
> >
> > Jun
> >
> > On Fri, Mar 14, 2025 at 11:52 AM Kirk True <k...@kirktrue.pro> wrote:
> >
> > > Hi all,
> > >
> > > I would like to start a discussion for KIP-1139: Add support for OAuth
> > > jwt-bearer grant type:
> > >
> > > https://cwiki.apache.org/confluence/x/uIxEF
> > >
> > > The proposal is twofold:
> > >
> > > * Add support for the OAuth 2.0 JWT Bearer grant type to avoid use of
> > > plaintext client secrets
> > > * Promote internal APIs for public use by this and future OAuth work
> > >
> > > Thanks!
> > > Kirk
> >
>

Reply via email to