Josh Elser created CALCITE-1282:
-----------------------------------

             Summary: Avatica will only accept SPNEGO-authenticated clients 
from the same realm as the server's principal
                 Key: CALCITE-1282
                 URL: https://issues.apache.org/jira/browse/CALCITE-1282
             Project: Calcite
          Issue Type: Bug
          Components: avatica
    Affects Versions: avatica-1.8.0
            Reporter: Josh Elser
            Assignee: Josh Elser
            Priority: Critical
             Fix For: avatica-1.9.0


When setting up the Jetty security Constraint class, Jetty treats Kerberos 
realms as "roles". When configuring allowed users to Jetty with some 
constraint, you have to set what roles (realms) are allowed.

Presently, Avatica just sets the realm of the server's principal as allowed, 
which means that in some multi-realm KDC (or cross-domain MIT KRB+Active 
Directory) setup, users from the other realm which should be allowed are denied.

Even better, Jetty's syntax for {{\*}} for allowing any role (realm) doesn't 
actually work. Their logic in 9.2.15 for {{ConstraintSecurityHandler}} appears 
broken:

{code}
        //handle * role constraint
        if (roleInfo.isAnyRole() && request.getUserPrincipal() != null && 
isUserInRole)
        {
            return true;
        }
{code}

The above check should let users through with any role when {{isAnyRole()}} 
returns true, but the final {{isUserInRole}} check requires that the role is 
explicitly listed in the list of allowedRoles.

As such, we're going to need to expose an API which allows users to set a list 
of allowed realms since Jetty is busted to make Kerberos authentication 
actually work correctly.

Thanks to [~kliew] for bringing this one to my attention.





--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to