bq. change the check in equals() to be this.getClass().equals(other.
getClass())

I happened to have Effective Java on hand.
Please take a look at related discussion on page 39.

Josh later on mentioned Liskov substitution principle and a workaround
(favoring composition).

FYI



On Mon, Aug 28, 2017 at 4:48 PM, Colin McCabe <cmcc...@apache.org> wrote:

> Thanks, Jason, this is a great improvement!
>
> One minor nit.  The current KafkaPrincipal#equals looks like this:
>
> >    @Override
> >    public boolean equals(Object o) {
> >        if (this == o) return true;
> >        if (!(o instanceof KafkaPrincipal)) return false;
> >
> >        KafkaPrincipal that = (KafkaPrincipal) o;
> >
> >        if (!principalType.equals(that.principalType)) return false;
> >        return name.equals(that.name);
> >    }
>
> So if I implement MyKafkaPrincipalWithGroup that has an extra groupName
> field, I can have this situation:
>
> > KafkaPrincipal oldPrincipal = new KafkaPrincipal("User", "foo");
> > MyKafkaPrincipalWithGroup newPrincipal =
> >    new MyKafkaPrincipalWithGroup("User", "foo", "mygroup")
> > System.out.println("" + oldPrincipal == newPrincipal) // true
> > System.out.println("" + newPrincipal == oldPrincipal) // false
>
> This is clearly bad, because it makes equality non-transitive.  The
> reason for this problem is because KafkaPrincipal#equals checks if
> MyKafkaPrincipalWithGroup is an instance of KafkaPrincipal-- and it is.
> It then proceeds to check if the user is the same-- and it is.  So it
> returns true.  It does not check the groups field, because it doesn't
> know about it.  On the other hand, MyKafkaPrincipalWithGroup#equals will
> check to see KafkaPrincipal is an instance of
> MyKafkaPrincipalWithGroup-- and it isn't.  So it returns false.
>
> In the KafkaPrincipal base class, it would be better to change the check
> in equals() to be this.getClass().equals(other.getClass()).  In other
> words, check for exact class equality, not instanceof.
>
> Alternately, we could implement a final equals method in the base class
> that compares by the toString method, under the assumption that any
> difference in KafkaPrincipal objects should be reflected in their
> serialized form.
>
> >    @Override
> >    public final boolean equals(Object o) {
> >        if (this == o) return true;
> >        if (!(o instanceof KafkaPrincipal)) return false;
> >        return toString().equals(o.toString());
> >    }
>
> Another question related to subclassing KafkaPrincipal: should we move
> KafkaPrincipal#fromString into an internal, non-public class?  It seems
> like people might expect
> KafkaPrincipal.fromString(myCustomPrincipal.toString()) to work, but it
> will not for subclasses.
>
> best,
> Colin
>
>
> On Mon, Aug 28, 2017, at 15:51, Jason Gustafson wrote:
> > Thanks all for the discussion. I'll begin a vote in the next couple days.
> >
> > -Jason
> >
> > On Fri, Aug 25, 2017 at 5:01 PM, Don Bosco Durai <bo...@apache.org>
> > wrote:
> >
> > > Jason, thanks for the clarification.
> > >
> > > Bosco
> > >
> > >
> > > On 8/25/17, 4:59 PM, "Jason Gustafson" <ja...@confluent.io> wrote:
> > >
> > >     Hey Don,
> > >
> > >     That is not actually part of the KIP. It was a (somewhat pedantic)
> > > example
> > >     used to illustrate how the kafka principal semantics could be
> applied
> > > to
> > >     authorizers which understood group-level ACLs. The key point is
> this:
> > >     although a principal is identified only by its type and name, the
> > >     KafkaPrincipal can be used to represent relations to other
> principals.
> > > In
> > >     this case, we have a user principal which is related to a group
> > > principal
> > >     through the UserPrincipalAndGroup object. A GroupAuthorizer could
> then
> > >     leverage this relation. As you suggest, a true implementation would
> > > allow
> > >     multiple groups.
> > >
> > >     I will add a note to the KIP to emphasize that this is just an
> example.
> > >
> > >     Thanks,
> > >     Jason
> > >
> > >     On Fri, Aug 25, 2017 at 4:37 PM, Don Bosco Durai <bo...@apache.org
> >
> > > wrote:
> > >
> > >     > Jason, thanks for confirming that. Since there are existing
> custom
> > >     > plugins, we might have to give enough time for them to start
> using
> > > the
> > >     > newer interface.
> > >     >
> > >     > I quickly glanced over the KIP, it looks good. Here is one
> comment:
> > >     >
> > >     > -------
> > >     > In the future, we may add support for groups to Kafka. This was
> > > brought up
> > >     > in the KIP-111 discussion. To support this, we can provide a
> > > groupId()
> > >     > method in KafkaPrincipal which defaults to a null value or an
> empty
> > > string.
> > >     > Extensions can override this just as before. Also note that it is
> > > still
> > >     > possible for the Authorizer implementation to derive its own
> group
> > >     > information for enforcement.
> > >     > class UserPrincipalAndGroup extends KafkaPrincipal {
> > >     >   private final String userId;
> > >     >   private final String groupId;
> > >     > -------
> > >     >
> > >     > We should assume that users might belong to multiple groups.
> > >     >
> > >     > Also, not sure what the below method is really doing?
> > >     > ---
> > >     > class UserPrincipalAndGroup extends KafkaPrincipal {
> > >     >
> > >     > public KafkaPrincipal group() {
> > >     >     return new KafkaPrincipal(KafkaPrincipal.GROUP_TYPE,
> groupId);
> > >     >   }
> > >     > ---
> > >     > Thanks
> > >     >
> > >     > Bosco
> > >     >
> > >     >
> > >     >
> > >     > On 8/25/17, 4:11 PM, "Jason Gustafson" <ja...@confluent.io>
> wrote:
> > >     >
> > >     >     Hi Don,
> > >     >
> > >     >     I don't think so. We are not making any changes to the
> Authorizer
> > >     > interface
> > >     >     itself. The KafkaPrincipal object does not change either,
> though
> > > we now
> > >     >     explicitly allow it to be extended. That means you have to
> > > exercise a
> > >     >     little caution when combining a custom PrincipalBuilder with
> a
> > > custom
> > >     >     Authorizer. For the default principal builder shipped with
> > > Kafka, it
> > >     > will
> > >     >     work the same as it currently does. Old implementations of
> > >     > PrincipalBuilder
> > >     >     will also continue to work exactly as they do now, but please
> > > note
> > >     > that I
> > >     >     am proposing to deprecate this interface. It will still be
> > > supported in
> > >     >     1.0.0, but we may remove it in a future major release.
> > >     >
> > >     >     -Jason
> > >     >
> > >     >     On Fri, Aug 25, 2017 at 3:51 PM, Don Bosco Durai <
> > > bo...@apache.org>
> > >     > wrote:
> > >     >
> > >     >     > Jason
> > >     >     >
> > >     >     > Do you anticipate any backward compatibility issues with
> > > existing
> > >     > custom
> > >     >     > implementation of the authorization interface/plugins?
> > >     >     >
> > >     >     > Thanks
> > >     >     >
> > >     >     > Bosco
> > >     >     >
> > >     >     >
> > >     >     > On 8/25/17, 3:22 PM, "Jason Gustafson" <ja...@confluent.io
> >
> > > wrote:
> > >     >     >
> > >     >     >     No problem. I'll add a note to the KIP to emphasize
> that
> > > we will
> > >     > use
> > >     >     > the
> > >     >     >     same object built by the KafkaPrincipalBuilder in the
> > > Session
> > >     > object
> > >     >     > passed
> > >     >     >     to the authorizer.
> > >     >     >
> > >     >     >     -Jason
> > >     >     >
> > >     >     >     On Fri, Aug 25, 2017 at 3:17 PM, Mayuresh Gharat <
> > >     >     > gharatmayures...@gmail.com
> > >     >     >     > wrote:
> > >     >     >
> > >     >     >     > Perfect.
> > >     >     >     > As long as there is a way we can access the
> originally
> > > created
> > >     >     > Principal in
> > >     >     >     > the Authorizer, it would solve the KIP-111 issue.
> > >     >     >     >
> > >     >     >     > This is really helpful, thanks again.
> > >     >     >     >
> > >     >     >     > Thanks,
> > >     >     >     >
> > >     >     >     > Mayuresh
> > >     >     >     >
> > >     >     >     > On Fri, Aug 25, 2017 at 3:13 PM, Jason Gustafson <
> > >     > ja...@confluent.io
> > >     >     > >
> > >     >     >     > wrote:
> > >     >     >     >
> > >     >     >     > > Hi Mayuresh,
> > >     >     >     > >
> > >     >     >     > > To clarify, the intention is to use the
> KafkaPrincipal
> > > object
> > >     >     > built by
> > >     >     >     > the
> > >     >     >     > > KafkaPrincipalBuilder inside the Session. So we
> would
> > > remove
> > >     > the
> > >     >     > logic to
> > >     >     >     > > construct a new KafkaPrincipal using only the name
> > > from the
> > >     >     > Principal.
> > >     >     >     > Then
> > >     >     >     > > it should be possible to pass the `AuthzPrincipal`
> to
> > > the
> > >     >     > underlying
> > >     >     >     > > library through the `Extended_Plugged_In_Class` as
> > > you've
> > >     > suggested
> > >     >     >     > above.
> > >     >     >     > > Is that reasonable for this use case?
> > >     >     >     > >
> > >     >     >     > > Thanks,
> > >     >     >     > > Jason
> > >     >     >     > >
> > >     >     >     > >
> > >     >     >     > > On Fri, Aug 25, 2017 at 2:44 PM, Mayuresh Gharat <
> > >     >     >     > > gharatmayures...@gmail.com
> > >     >     >     > > > wrote:
> > >     >     >     > >
> > >     >     >     > > > Hi Jason,
> > >     >     >     > > >
> > >     >     >     > > > Thanks for the replies.
> > >     >     >     > > >
> > >     >     >     > > > I think it would be better to discuss with an
> > > example that
> > >     > we
> > >     >     > were
> > >     >     >     > trying
> > >     >     >     > > > to address with KIP-111 and see if the current
> > > mentioned
> > >     >     > solution would
> > >     >     >     > > > address it.
> > >     >     >     > > >
> > >     >     >     > > > Let's consider a third party library called
> > > authz_lib that
> > >     > is
> > >     >     > provided
> > >     >     >     > by
> > >     >     >     > > > some Security team at  some company.
> > >     >     >     > > >
> > >     >     >     > > >    - When we call authz_lib.createPrincipal(
> > > X509_cert),
> > >     > it would
> > >     >     >     > return
> > >     >     >     > > an
> > >     >     >     > > >    AuthzPrincipal that implements
> > > Java.Security.Principal.
> > >     >     >     > > >
> > >     >     >     > > >
> > >     >     >     > > >    - The authz_lib also provides an
> > > checkAccess(....) call
> > >     > that
> > >     >     > takes
> > >     >     >     > in
> > >     >     >     > > 3
> > >     >     >     > > >    parameters :
> > >     >     >     > > >       - authz_principal
> > >     >     >     > > >       - operation type ("Read", "Write"...)
> > >     >     >     > > >       - resource (for simplicity lets consider
> it as
> > > a
> > >     > TopicName)
> > >     >     >     > > >
> > >     >     >     > > >
> > >     >     >     > > >    - The AuthzPrincipal looks like this :
> > >     >     >     > > >
> > >     >     >     > > > class AuthzPrincipal implements
> > > java.security.Principal
> > >     >     >     > > > {
> > >     >     >     > > > String name;
> > >     >     >     > > > String field1;
> > >     >     >     > > > Object field2;
> > >     >     >     > > > Object field3;
> > >     >     >     > > > .....//Some third party logic......
> > >     >     >     > > > }
> > >     >     >     > > >
> > >     >     >     > > >
> > >     >     >     > > >    - In PrincipalBuilder.buildPrincipal() would
> > > return
> > >     >     > AuthzPrincipal
> > >     >     >     > as
> > >     >     >     > > >    follows :
> > >     >     >     > > >
> > >     >     >     > > > public Principal buildPrincipal(...)
> > >     >     >     > > > {
> > >     >     >     > > > ......
> > >     >     >     > > > X509Certificate x509Cert = session.getCert(..);
> > >     >     >     > > > return authz_lib.createPrincipal(x509Cert);
> > >     >     >     > > > }
> > >     >     >     > > >
> > >     >     >     > > >
> > >     >     >     > > >    - The custom Authorizer (lets call it
> > >     > CustomAuthzAuthorizer),
> > >     >     > we
> > >     >     >     > would
> > >     >     >     > > >    use the checkAccess() function provided by the
> > >     > authz_lib as
> > >     >     > follows
> > >     >     >     > :
> > >     >     >     > > >
> > >     >     >     > > > public class CustomAuthzAuthorizer implements
> > > Authorizer
> > >     >     >     > > > {
> > >     >     >     > > > .........
> > >     >     >     > > > public boolean authorize(.....)
> > >     >     >     > > > {
> > >     >     >     > > >            AuthzPrincipal authz_principal =
> > >     > (AuthzPrincipal)
> > >     >     >     > > > session.getPrincipal();
> > >     >     >     > > > return authz_lib.checkAccess(authz_principal,
> > > "Read",
> > >     > "topicX");
> > >     >     >     > > > }
> > >     >     >     > > > ..........
> > >     >     >     > > > }
> > >     >     >     > > >
> > >     >     >     > > >
> > >     >     >     > > >    - The issue with current implementation is
> that in
> > >     >     >     > > >    processCompletedReceives() in SocketServer we
> > > create a
> > >     >     >     > KafkaPrincipal
> > >     >     >     > > >    that just extracts the name from
> AuthzPrincipal as
> > >     > follows :
> > >     >     >     > > >
> > >     >     >     > > >     session = RequestChannel.Session(new
> > >     >     >     > > > KafkaPrincipal(KafkaPrincipal.USER_TYPE,
> > >     >     >     > > > *openOrClosingChannel.principal.getName*),
> > >     >     >     > > > openOrClosingChannel.socketAddress)
> > >     >     >     > > >
> > >     >     >     > > > So the "AuthzPrincipal authz_principal =
> > > (AuthzPrincipal)
> > >     >     >     > > > session.getPrincipal()" call in the
> > > CustomAuthzAuthorizer
> > >     > would
> > >     >     > error
> > >     >     >     > > > out because we are trying to cast a
> KafkaPrincipal to
> > >     >     > AuthzPrincipal.
> > >     >     >     > > >
> > >     >     >     > > >
> > >     >     >     > > >
> > >     >     >     > > > In your reply when you said that :
> > >     >     >     > > >
> > >     >     >     > > > The KIP says that a user can have a class that
> > > extends
> > >     >     > KafkaPrincipal.
> > >     >     >     > > > Would this extended class be used when
> constructing
> > > the
> > >     > Session
> > >     >     > object
> > >     >     >     > > > in the SocketServer instead of constructing a new
> > >     > KafkaPrincipal?
> > >     >     >     > > >
> > >     >     >     > > > Yes, that's correct. We want to allow the
> authorizer
> > > to be
> > >     > able
> > >     >     > to
> > >     >     >     > > leverage
> > >     >     >     > > > > additional information from the authentication
> > > layer.
> > >     >     >     > > >
> > >     >     >     > > >
> > >     >     >     > > > Would it make sense to make this extended class
> > > pluggable
> > >     > and
> > >     >     > when
> > >     >     >     > > > constructing the Session object in SocketServer
> > > check if a
> > >     >     > plugin is
> > >     >     >     > > > defined and use it and if not use the default
> > >     > KafkaPrincipal
> > >     >     > something
> > >     >     >     > > like
> > >     >     >     > > > :
> > >     >     >     > > >
> > >     >     >     > > > if (getConfig("principal.
> > > pluggedIn.class").isDefined())
> > >     >     >     > > > //"principal.pluggedIn.class"
> > >     >     >     > > > is just an example name for the config
> > >     >     >     > > > {
> > >     >     >     > > > session = RequestChannel.Session(*
> > >     > Extended_Plugged_In_Class*,
> > >     >     >     > > > openOrClosingChannel.socketAddress)
> > >     >     >     > > > }
> > >     >     >     > > > else
> > >     >     >     > > > {
> > >     >     >     > > > session = RequestChannel.Session(new
> > >     >     > KafkaPrincipal(KafkaPrincipal.
> > >     >     >     > > > USER_TYPE,
> > >     >     >     > > > *openOrClosingChannel.principal.getName*),
> > >     >     >     > > > openOrClosingChannel.socketAddress)
> > >     >     >     > > > }
> > >     >     >     > > >
> > >     >     >     > > > This would solve the issue above as follows :
> > >     >     >     > > >
> > >     >     >     > > > We can have something like :
> > >     >     >     > > > public class Extended_Plugged_In_Class extends
> > >     > KafkaPrincipal
> > >     >     >     > > > {
> > >     >     >     > > > AuthzPrincipal authzPrincipal;
> > >     >     >     > > >
> > >     >     >     > > > public Extended_Plugged_In_Class(.....,
> > > AuthzPrincipal
> > >     >     > principal)
> > >     >     >     > > > {
> > >     >     >     > > > super(...);
> > >     >     >     > > > authzPrincipal = principal;
> > >     >     >     > > >
> > >     >     >     > > > }
> > >     >     >     > > >
> > >     >     >     > > > ......
> > >     >     >     > > >
> > >     >     >     > > > public AuthzPrincipal getAuthzPrincipal()
> > >     >     >     > > > {
> > >     >     >     > > > return authzPrincipal;
> > >     >     >     > > > }
> > >     >     >     > > > }
> > >     >     >     > > >
> > >     >     >     > > > In the CustomAuthzAuthorizer we could do
> something
> > > like :
> > >     >     >     > > >
> > >     >     >     > > > public class CustomAuthzAuthorizer implements
> > > Authorizer
> > >     >     >     > > > {
> > >     >     >     > > > .........
> > >     >     >     > > > public boolean authorize(.....)
> > >     >     >     > > > {
> > >     >     >     > > > Extended_Plugged_In_Class
> extended_Kafka_Principal =
> > >     >     >     > > > (Extended_Plugged_In_Class)
> > >     >     >     > > > session.getPrincipal();
> > >     >     >     > > >            AuthzPrincipal authz_principal =
> > >     >     >     > > > extended_Kafka_Principal.getAuthzPrincipal();
> > >     >     >     > > > return authz_lib.checkAccess(authz_principal,
> > > "Read",
> > >     > "topicX");
> > >     >     >     > > > }
> > >     >     >     > > > ..........
> > >     >     >     > > > }
> > >     >     >     > > >
> > >     >     >     > > >
> > >     >     >     > > > Thanks,
> > >     >     >     > > >
> > >     >     >     > > > Mayuresh
> > >     >     >     > > >
> > >     >     >     > > > On Fri, Aug 25, 2017 at 11:53 AM, Jason
> Gustafson <
> > >     >     > ja...@confluent.io>
> > >     >     >     > > > wrote:
> > >     >     >     > > >
> > >     >     >     > > > > Hey Mayuresh,
> > >     >     >     > > > >
> > >     >     >     > > > > Thanks for the comments.
> > >     >     >     > > > >
> > >     >     >     > > > >    - The KIP says that a user can have a class
> that
> > >     > extends
> > >     >     >     > > > KafkaPrincipal.
> > >     >     >     > > > > >    Would this extended class be used when
> > > constructing
> > >     > the
> > >     >     > Session
> > >     >     >     > > > object
> > >     >     >     > > > > > in
> > >     >     >     > > > > >    the SocketServer instead of constructing
> a new
> > >     >     > KafkaPrincipal?
> > >     >     >     > > > >
> > >     >     >     > > > >
> > >     >     >     > > > > Yes, that's correct. We want to allow the
> > > authorizer to
> > >     > be
> > >     >     > able to
> > >     >     >     > > > leverage
> > >     >     >     > > > > additional information from the authentication
> > > layer.
> > >     >     >     > > > >
> > >     >     >     > > > >     - The KIP says "A principal is always
> > > identifiable
> > >     > by a
> > >     >     > principal
> > >     >     >     > > > type
> > >     >     >     > > > > >    and a name. Nothing else should ever be
> > > required."
> > >     > This
> > >     >     > might
> > >     >     >     > not
> > >     >     >     > > be
> > >     >     >     > > > > > true
> > >     >     >     > > > > >    always, right? For example, we might have
> a
> > > custom
> > >     > third
> > >     >     > party
> > >     >     >     > ACL
> > >     >     >     > > > > > library
> > >     >     >     > > > > >    that creates a custom Principal from the
> > > passed in
> > >     > cert
> > >     >     > (this is
> > >     >     >     > > > done
> > >     >     >     > > > > in
> > >     >     >     > > > > >    PrincipalBuilder/KafkaPrincipalBuilder)
> and
> > > the
> > >     > custom
> > >     >     >     > Authorizer
> > >     >     >     > > > > might
> > >     >     >     > > > > >    use this third party library to authorize
> > > using this
> > >     >     > custom
> > >     >     >     > > > Principal
> > >     >     >     > > > > >    object. The developer who is implementing
> the
> > > Kafka
> > >     >     > Authorizer
> > >     >     >     > > > should
> > >     >     >     > > > > >    not be caring about what the custom
> Principal
> > > would
> > >     > look
> > >     >     > like
> > >     >     >     > and
> > >     >     >     > > > its
> > >     >     >     > > > > >    details, since it will just pass it to the
> > > third
> > >     > party
> > >     >     > library
> > >     >     >     > in
> > >     >     >     > > > > Kafka
> > >     >     >     > > > > >    Authorizer's authorize() call.
> > >     >     >     > > > >
> > >     >     >     > > > >
> > >     >     >     > > > > I'm not sure I understand this. Are you saying
> > > that the
> > >     >     > authorizer
> > >     >     >     > and
> > >     >     >     > > > > principal builder are implemented by separate
> > >     > individuals? If
> > >     >     > the
> > >     >     >     > > > > authorizer doesn't understand how to identify
> the
> > >     > principal,
> > >     >     > then it
> > >     >     >     > > > > wouldn't work, right? Maybe I'm missing
> something?
> > >     >     >     > > > >
> > >     >     >     > > > > Let me explain how I see this. The simple ACL
> > > authorizer
> > >     > that
> > >     >     > Kafka
> > >     >     >     > > ships
> > >     >     >     > > > > with understands user principals as consisting
> of
> > > a type
> > >     > and a
> > >     >     > name.
> > >     >     >     > > Any
> > >     >     >     > > > > principal builder that follows this assumption
> > > will work
> > >     > with
> > >     >     > the
> > >     >     >     > > > > SimpleAclAuthorizer. In some cases, the
> principal
> > >     > builder may
> > >     >     > provide
> > >     >     >     > > > > additional metadata in a KafkaPrincipal
> extension
> > > such
> > >     > as user
> > >     >     > groups
> > >     >     >     > > or
> > >     >     >     > > > > roles. This information is not needed to
> identify
> > > the
> > >     > user
> > >     >     > principal,
> > >     >     >     > > so
> > >     >     >     > > > > the builder is still compatible with the
> > >     > SimpleAclAuthorizer.
> > >     >     > It
> > >     >     >     > would
> > >     >     >     > > > also
> > >     >     >     > > > > be compatible with a RoleBasedAuthorizer which
> > >     > understood how
> > >     >     > to use
> > >     >     >     > > the
> > >     >     >     > > > > role metadata provided by the KafkaPrincipal
> > > extension.
> > >     >     > Basically
> > >     >     >     > what
> > >     >     >     > > we
> > >     >     >     > > > > would have is a user principal which is
> related to
> > > one
> > >     > or more
> > >     >     > role
> > >     >     >     > > > > principals through the KafkaPrincipal
> extension.
> > > Both
> > >     > user and
> > >     >     > role
> > >     >     >     > > > > principals are identifiable with a type and a
> > > name, so
> > >     > the ACL
> > >     >     >     > command
> > >     >     >     > > > tool
> > >     >     >     > > > > can then be used (perhaps with a custom
> > > authorizer) to
> > >     > define
> > >     >     >     > > permissions
> > >     >     >     > > > > in either case.
> > >     >     >     > > > >
> > >     >     >     > > > > On the other hand, if a user principal is
> > > identified by
> > >     > more
> > >     >     > than
> > >     >     >     > just
> > >     >     >     > > > its
> > >     >     >     > > > > name, then it is not compatible with the
> > >     > SimpleAclAuthorizer.
> > >     >     > This
> > >     >     >     > > > doesn't
> > >     >     >     > > > > necessarily rule out this use case. As long as
> the
> > >     > authorizer
> > >     >     > and the
> > >     >     >     > > > > principal builder both agree on how user
> > > principals are
> > >     >     > identified,
> > >     >     >     > > then
> > >     >     >     > > > > they can still be used together. But I am
> > > explicitly
> > >     > leaving
> > >     >     > out
> > >     >     >     > > support
> > >     >     >     > > > in
> > >     >     >     > > > > the ACL command tool for this use case in this
> > > KIP. This
> > >     > is
> > >     >     > mostly
> > >     >     >     > > about
> > >     >     >     > > > > clarifying what is compatible with the
> > > authorization
> > >     > system
> > >     >     > that
> > >     >     >     > Kafka
> > >     >     >     > > > > ships with. Of course we can always reconsider
> it
> > > in the
> > >     >     > future.
> > >     >     >     > > > >
> > >     >     >     > > > > Thanks,
> > >     >     >     > > > > Jason
> > >     >     >     > > > >
> > >     >     >     > > > > On Fri, Aug 25, 2017 at 10:48 AM, Mayuresh
> Gharat <
> > >     >     >     > > > > gharatmayures...@gmail.com> wrote:
> > >     >     >     > > > >
> > >     >     >     > > > > > Hi Jason,
> > >     >     >     > > > > >
> > >     >     >     > > > > > Thanks a lot for the KIP and sorry for the
> > > delayed
> > >     > response.
> > >     >     >     > > > > >
> > >     >     >     > > > > > I had a few questions :
> > >     >     >     > > > > >
> > >     >     >     > > > > >
> > >     >     >     > > > > >    - The KIP says that a user can have a
> class
> > > that
> > >     > extends
> > >     >     >     > > > > KafkaPrincipal.
> > >     >     >     > > > > >    Would this extended class be used when
> > > constructing
> > >     > the
> > >     >     > Session
> > >     >     >     > > > object
> > >     >     >     > > > > > in
> > >     >     >     > > > > >    the SocketServer instead of constructing
> a new
> > >     >     > KafkaPrincipal?
> > >     >     >     > > > > >
> > >     >     >     > > > > >
> > >     >     >     > > > > >    - The KIP says "A principal is always
> > > identifiable
> > >     > by a
> > >     >     >     > principal
> > >     >     >     > > > type
> > >     >     >     > > > > >    and a name. Nothing else should ever be
> > > required."
> > >     > This
> > >     >     > might
> > >     >     >     > not
> > >     >     >     > > be
> > >     >     >     > > > > > true
> > >     >     >     > > > > >    always, right? For example, we might have
> a
> > > custom
> > >     > third
> > >     >     > party
> > >     >     >     > ACL
> > >     >     >     > > > > > library
> > >     >     >     > > > > >    that creates a custom Principal from the
> > > passed in
> > >     > cert
> > >     >     > (this is
> > >     >     >     > > > done
> > >     >     >     > > > > in
> > >     >     >     > > > > >    PrincipalBuilder/KafkaPrincipalBuilder)
> and
> > > the
> > >     > custom
> > >     >     >     > Authorizer
> > >     >     >     > > > > might
> > >     >     >     > > > > >    use this third party library to authorize
> > > using this
> > >     >     > custom
> > >     >     >     > > > Principal
> > >     >     >     > > > > >    object. The developer who is implementing
> the
> > > Kafka
> > >     >     > Authorizer
> > >     >     >     > > > should
> > >     >     >     > > > > >    not be caring about what the custom
> Principal
> > > would
> > >     > look
> > >     >     > like
> > >     >     >     > and
> > >     >     >     > > > its
> > >     >     >     > > > > >    details, since it will just pass it to the
> > > third
> > >     > party
> > >     >     > library
> > >     >     >     > in
> > >     >     >     > > > > Kafka
> > >     >     >     > > > > >    Authorizer's authorize() call.
> > >     >     >     > > > > >
> > >     >     >     > > > > >
> > >     >     >     > > > > > Thanks,
> > >     >     >     > > > > >
> > >     >     >     > > > > > Mayuresh
> > >     >     >     > > > > >
> > >     >     >     > > > > >
> > >     >     >     > > > > > On Thu, Aug 24, 2017 at 10:21 AM, Mayuresh
> > > Gharat <
> > >     >     >     > > > > > gharatmayures...@gmail.com> wrote:
> > >     >     >     > > > > >
> > >     >     >     > > > > > > Sure.
> > >     >     >     > > > > > >
> > >     >     >     > > > > > > Thanks,
> > >     >     >     > > > > > >
> > >     >     >     > > > > > > Mayuresh
> > >     >     >     > > > > > >
> > >     >     >     > > > > > > On Wed, Aug 23, 2017 at 5:07 PM, Jun Rao <
> > >     > j...@confluent.io
> > >     >     > >
> > >     >     >     > wrote:
> > >     >     >     > > > > > >
> > >     >     >     > > > > > >> Hi, Mayuresh,
> > >     >     >     > > > > > >>
> > >     >     >     > > > > > >> Since this KIP covers the requirement in
> > > KIP-111,
> > >     > could
> > >     >     > you
> > >     >     >     > review
> > >     >     >     > > > it
> > >     >     >     > > > > > too?
> > >     >     >     > > > > > >>
> > >     >     >     > > > > > >> Thanks,
> > >     >     >     > > > > > >>
> > >     >     >     > > > > > >> Jun
> > >     >     >     > > > > > >>
> > >     >     >     > > > > > >>
> > >     >     >     > > > > > >> On Tue, Aug 22, 2017 at 3:04 PM, Jason
> > > Gustafson <
> > >     >     >     > > > ja...@confluent.io>
> > >     >     >     > > > > > >> wrote:
> > >     >     >     > > > > > >>
> > >     >     >     > > > > > >>> Bump. I'll open a vote in a few days if
> > > there are
> > >     > no
> > >     >     > comments.
> > >     >     >     > > > > > >>>
> > >     >     >     > > > > > >>> Thanks,
> > >     >     >     > > > > > >>> Jason
> > >     >     >     > > > > > >>>
> > >     >     >     > > > > > >>> On Sat, Aug 19, 2017 at 12:28 AM, Ismael
> > > Juma <
> > >     >     >     > ism...@juma.me.uk
> > >     >     >     > > >
> > >     >     >     > > > > > wrote:
> > >     >     >     > > > > > >>>
> > >     >     >     > > > > > >>> > Thanks for the KIP Jason. It seems
> > > reasonable and
> > >     >     > cleans up
> > >     >     >     > > some
> > >     >     >     > > > > > >>> > inconsistencies in that area. It would
> be
> > > great
> > >     > to get
> > >     >     > some
> > >     >     >     > > > > feedback
> > >     >     >     > > > > > >>> from
> > >     >     >     > > > > > >>> > Mayuresh and others who worked on
> KIP-111.
> > >     >     >     > > > > > >>> >
> > >     >     >     > > > > > >>> > Ismael
> > >     >     >     > > > > > >>> >
> > >     >     >     > > > > > >>> > On Thu, Aug 17, 2017 at 1:21 AM, Jason
> > > Gustafson
> > >     > <
> > >     >     >     > > > > ja...@confluent.io
> > >     >     >     > > > > > >
> > >     >     >     > > > > > >>> > wrote:
> > >     >     >     > > > > > >>> >
> > >     >     >     > > > > > >>> > > Hi All,
> > >     >     >     > > > > > >>> > >
> > >     >     >     > > > > > >>> > > I've added a new KIP to improve and
> > > extend the
> > >     >     > principal
> > >     >     >     > > > building
> > >     >     >     > > > > > API
> > >     >     >     > > > > > >>> > that
> > >     >     >     > > > > > >>> > > Kafka exposes:
> > >     >     >     > > > > > >>> > > https://cwiki.apache.org/
> > >     >     > confluence/display/KAFKA/KIP-
> > >     >     >     > > > > > >>> > > 189%3A+Improve+principal+
> > >     > builder+interface+and+add+
> > >     >     >     > > > > > support+for+SASL
> > >     >     >     > > > > > >>> > > .
> > >     >     >     > > > > > >>> > >
> > >     >     >     > > > > > >>> > > As always, feedback is appreciated.
> > >     >     >     > > > > > >>> > >
> > >     >     >     > > > > > >>> > > Thanks,
> > >     >     >     > > > > > >>> > > Jason
> > >     >     >     > > > > > >>> > >
> > >     >     >     > > > > > >>> >
> > >     >     >     > > > > > >>>
> > >     >     >     > > > > > >>
> > >     >     >     > > > > > >>
> > >     >     >     > > > > > >
> > >     >     >     > > > > > >
> > >     >     >     > > > > > > --
> > >     >     >     > > > > > > -Regards,
> > >     >     >     > > > > > > Mayuresh R. Gharat
> > >     >     >     > > > > > > (862) 250-7125
> > >     >     >     > > > > > >
> > >     >     >     > > > > >
> > >     >     >     > > > > >
> > >     >     >     > > > > >
> > >     >     >     > > > > > --
> > >     >     >     > > > > > -Regards,
> > >     >     >     > > > > > Mayuresh R. Gharat
> > >     >     >     > > > > > (862) 250-7125
> > >     >     >     > > > > >
> > >     >     >     > > > >
> > >     >     >     > > >
> > >     >     >     > > >
> > >     >     >     > > >
> > >     >     >     > > > --
> > >     >     >     > > > -Regards,
> > >     >     >     > > > Mayuresh R. Gharat
> > >     >     >     > > > (862) 250-7125
> > >     >     >     > > >
> > >     >     >     > >
> > >     >     >     >
> > >     >     >     >
> > >     >     >     >
> > >     >     >     > --
> > >     >     >     > -Regards,
> > >     >     >     > Mayuresh R. Gharat
> > >     >     >     > (862) 250-7125
> > >     >     >     >
> > >     >     >
> > >     >     >
> > >     >     >
> > >     >     >
> > >     >
> > >     >
> > >     >
> > >     >
> > >
> > >
> > >
> > >
>

Reply via email to