Matthew Clarke created NIFI-13409:
-------------------------------------

             Summary: NiFi Identity mappings stacking rather then first match 
only being applied
                 Key: NIFI-13409
                 URL: https://issues.apache.org/jira/browse/NIFI-13409
             Project: Apache NiFi
          Issue Type: Bug
    Affects Versions: 1.23.1, 1.18.0
            Reporter: Matthew Clarke


Observed that NiFi is evaluating user identities against multiple configured 
mapping patterns and applying the value and transforms for each matched pattern.

According to documentation, the expected behavior is that mapping are evaluated 
in lexicographical order and first match only has its value and transform 
applied.

Lets assume I have a node certificate with "CN=nifi-node1, ST=MD, C=US" and a 
ldap username "nifiadmin" of the purposes of these observations and tests.

TEST 1:
Configured identity.mappings:

nifi.security.identity.mapping.pattern.dn=^CN=(.*?),\s{0,1}.+$
nifi.security.identity.mapping.transform.dn=NONE
nifi.security.identity.mapping.value.dn=$1
nifi.security.identity.mapping.pattern.ldap=^(.*)$
nifi.security.identity.mapping.transform.ldap=UPPER
nifi.security.identity.mapping.value.ldap=$1

Observations:
1. The nodes DN did  have CN value extracted and also uppercased
NIFI-NODE1   <-- unexpected
2. My ldap users are transformed to all uppercase
NIFIAMDIN <-- expected

TEST 2:
Configured identity.mappings:

nifi.security.identity.mapping.pattern.dn=^CN=(.*?),\s{0,1}.+$
nifi.security.identity.mapping.transform.dn=NONE
nifi.security.identity.mapping.value.dn=$1
nifi.security.identity.mapping.pattern.ldap=^(.*)$
nifi.security.identity.mapping.transform.ldap=UPPER
nifi.security.identity.mapping.value.ldap=$1
nifi.security.identity.mapping.pattern.username=^(.*)$
nifi.security.identity.mapping.transform.username=LOWER
nifi.security.identity.mapping.value.username=$1

Observations:
1. The nodes DN did  have CN value extracted and also uppercased
NIFI-NODE1   <-- unexpected
2. My ldap users are transformed to all uppercase
NIFIAMDIN <-- unexpected (assumed it would be lower if being stacked since 
"username" mapping woudl be evaled after "ldap" mapping)

TEST 3:
Configured identity.mappings:

nifi.security.identity.mapping.pattern.dn=^CN=(.*?),\s{0,1}.+$
nifi.security.identity.mapping.transform.dn=NONE
nifi.security.identity.mapping.value.dn=$1
nifi.security.identity.mapping.pattern.ldap=^(.*)$
nifi.security.identity.mapping.transform.ldap=LOWER
nifi.security.identity.mapping.value.ldap=$1
nifi.security.identity.mapping.pattern.username=^(.*)$
nifi.security.identity.mapping.transform.username=UPPER
nifi.security.identity.mapping.value.username=$1

Observations:
1. The nodes DN did  have CN value extracted and also uppercased
nifi-node1  <-- expected
2. My ldap users are transformed to all uppercase
nifiadmin <-- expected
Here everything remained lowercase as expected (node that both "ldap" and 
"username" have same pattern regex set.

TEST 4:
Configured identity.mappings:

nifi.security.identity.mapping.pattern.dn=^CN=(.*?),\s{0,1}.+$
nifi.security.identity.mapping.transform.dn=NONE
nifi.security.identity.mapping.value.dn=$1
nifi.security.identity.mapping.pattern.ldap=^ldap(.*?)$
nifi.security.identity.mapping.transform.ldap=LOWER
nifi.security.identity.mapping.value.ldap=$1
nifi.security.identity.mapping.pattern.username=^(.*)$
nifi.security.identity.mapping.transform.username=UPPER
nifi.security.identity.mapping.value.username=$1

Observations:
1. The nodes DN did  have CN value extracted and also uppercased
NIFI-NODE1  <-- unexpected
2. My ldap users are transformed to all uppercase
NIFIADMIN <-- expected
Appears that when multiple mappings have same pattern regex, only first is 
having its value and transform stacked.

TEST 5:
Configured identity.mappings:

nifi.security.identity.mapping.pattern.dn=^CN=(.*?),\s{0,1}.+$
nifi.security.identity.mapping.transform.dn=NONE
nifi.security.identity.mapping.value.dn=$1
nifi.security.identity.mapping.pattern.ldap=^ldap(.*?)$
nifi.security.identity.mapping.transform.ldap=LOWER
nifi.security.identity.mapping.value.ldap=$1
nifi.security.identity.mapping.pattern.username=^(.*).test$
nifi.security.identity.mapping.transform.username=UPPER
nifi.security.identity.mapping.value.username=$1

Observations:
this test was to see if only transforms were being stacked or both value and 
transform were stacking.
1. The nodes DN did  have CN value extracted and also uppercased
NIFI-NODE1.TEST  <-- unexpected
2. My ldap users are transformed to all uppercase
NIFIADMIN.TEST <-- expected

This unexpected behavior causes issues when identities are coming from multiple 
sources and user needs to uniquely manipulated those source identities. If one 
pattern trims to a value that then matches another pattern, values and 
transform stack.

Expectation is that identity mappings are evaluated by property name in 
lexicographical order and only the first matching pattern as its corresponding  
value and transform applied ignoring all other matching patterns. 






--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to