[
https://issues.apache.org/jira/browse/NIFI-8228?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Pierre Villard resolved NIFI-8228.
----------------------------------
Resolution: Feedback Received
Apache NiFi 1.x is no longer maintained and no new release is planned on the
1.x release line. Marking as resolved as part of a cleanup operation. Please
open a new one with an updated description if this is still relevant for NiFi
2.x.
> Microsoft Active Directory LDAP integration bug
> -----------------------------------------------
>
> Key: NIFI-8228
> URL: https://issues.apache.org/jira/browse/NIFI-8228
> Project: Apache NiFi
> Issue Type: Bug
> Components: Security
> Affects Versions: 1.12.1
> Reporter: Rafael Micó
> Priority: Major
> Labels: security
> Fix For: 1.12.1
>
>
> Hi
>
> When trying to integrate both Authentication and Authorization of NiFi with
> Microsoft Active Directory via LDAP, we have seen that NiFi is unable to
> relate a valid Authentication done via ldap-provider
> (org.apache.nifi.ldap.LdapProvider) with an Authorization (user to group
> relationship) done via ldap-user-group-provider
> (org.apache.nifi.ldap.tenants.LdapUserGroupProvider).
>
> As we have seen in the NiFi logs (enabling DEBUG mode) and on TCPDUMP dumps,
> the issue seems to be related on the ldap-provider authentication.
> Summarizing:
> 1.- ldap-provider binds to the LDAP service with the "Manager DN" credentials.
> 2.- LDAP server (Microsoft Active Directory) responses with a successful bind
> 3.- ldap-provider searches for the user trying to log in (using
> sAMAccountName attribute)
> 4.- LDAP server (Microsoft Active Directory) responses with the information
> of the relevant user. In this information, the attribute "distinghuishedName"
> is provided like "CN=John,OU=Users,OU=domain,OU=internal"
> 5.- ldap-provider binds to the LDAP service with the logged user credentials
> but using the distiguishedName "cn=John,ou=Users,ou=domain,ou=internal",
> *with lowercase LDAP prefixes*
> 6.- LDAP server (Microsoft Active Directory) responses with a successful bind
> as the LDAP prefixes are accepted in uppercase or lowercase
> 7.- ldap-user-group-provider searches for
> "CN=John,OU=Users,OU=domain,OU=internal", the authenticated user, against
> "CN=John,OU=Users,OU=domain,OU=internal", the user that has been found in the
> LDAP authorization. The difference in the LDAP prefixes causes the
> "CN=John,OU=Users,OU=domain,OU=internal" not to belong to any authorized
> group, thereafter rejecting the user.
>
> The solution will be that ldap-provider performs the bind to the Active
> Directory LDAP server using the same string for distinghishedName as it
> received it from the LDAP server, not changing it to lowercase.
>
> Our configuration
> NiFi login-identity-providers.xml:
>
> {code:java}
> <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
> <loginIdentityProviders>
> <!--
> https://nifi.apache.org/docs/nifi-docs/html/administration-guide.html#ldap_login_identity_provider
> -->
> <provider>
> <identifier>ldap-provider</identifier>
> <class>org.apache.nifi.ldap.LdapProvider</class>
> <property name="Authentication Strategy">SIMPLE</property>
> <property name="Manager DN">CN=Nifi,OU=Special
> Accounts,DC=domain,DC=internal</property>
> <property name="Manager Password">*****************</property>
> <property name="Referral Strategy">FOLLOW</property>
> <property name="Connect Timeout">10 secs</property>
> <property name="Read Timeout">10 secs</property>
> <property name="Url">ldap://adserver.domain.internal:389</property>
> <property name="User Search
> Base">OU=Users,DC=domain,DC=internal</property>
> <property name="User Search Filter">sAMAccountName={0}</property>
> <property name="Identity Strategy">USE_DN</property>
> <property name="Authentication Expiration">12 hours</property>
> </provider>
> </loginIdentityProviders>
> {code}
>
>
> NiFi authorizers.cml:
> {code:java}
> <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
> <authorizers>
> <!--
> https://nifi.apache.org/docs/nifi-docs/html/administration-guide.html#ldapusergroupprovider
> -->
> <userGroupProvider>
> <identifier>file-user-group-provider</identifier>
> <class>org.apache.nifi.authorization.FileUserGroupProvider</class>
> <property name="Users File">./conf/users.xml</property>
> <property name="Legacy Authorized Users File"></property>
> <property name="Initial User Identity Node1">CN=nifi_admin,
> OU=nifi</property>
> </userGroupProvider>
> <userGroupProvider>
> <identifier>ldap-user-group-provider</identifier>
> <class>org.apache.nifi.ldap.tenants.LdapUserGroupProvider</class>
> <property name="Authentication Strategy">SIMPLE</property>
> <property name="Manager DN">CN=Nifi,OU=Special
> Accounts,DC=domain,DC=internal</property>
> <property name="Manager Password">*****************</property>
> <property name="Referral Strategy">FOLLOW</property>
> <property name="Connect Timeout">10 secs</property>
> <property name="Read Timeout">10 secs</property>
> <property name="Url">ldap://adserver.domain.internal:389</property>
> <property name="Page Size"></property>
> <property name="Sync Interval">10 mins</property>
> <property name="Group Membership - Enforce Case
> Sensitivity">false</property>
> <property name="User Search
> Base">OU=Users,DC=domain,DC=internal</property>
> <property name="User Object Class">user</property>
> <property name="User Search Scope">SUBTREE</property>
> <property name="User Search
> Filter">(memberOf=CN=GG_NIFI_Allowed_Users,OU=Nifi,OU=Admin
> Rights,OU=Groups,DC=domain,DC=internal)</property>
> <property name="User Identity Attribute">distinguishedName</property>
> <property name="User Group Name Attribute">memberOf</property>
> <property name="User Group Name Attribute - Referenced Group
> Attribute">distinguishedName</property>
> <property name="Group Search
> Base">OU=NIFI_App_Groups,OU=Nifi,OU=Admin
> Rights,OU=Groups,DC=domain,DC=internal</property>
> <property name="Group Object Class">group</property>
> <property name="Group Search Scope">ONE_LEVEL</property>
> <property name="Group Search Filter"></property>
> <property name="Group Name Attribute"></property>
> <!-- <property name="Group Member Attribute">member</property>
> <property name="Group Member Attribute - Referenced User
> Attributee">distinguishedName</property>-->
>
> </userGroupProvider>
> <userGroupProvider>
> <identifier>composite-user-group-provider</identifier>
>
> <class>org.apache.nifi.authorization.CompositeUserGroupProvider</class>
> <property name="User Group Provider
> 1">ldap-user-group-provider</property>
> <property name="User Group Provider
> 2">file-user-group-provider</property>
> </userGroupProvider>
> <accessPolicyProvider>
> <identifier>file-access-policy-provider</identifier>
> <class>org.apache.nifi.authorization.FileAccessPolicyProvider</class>
> <property name="User Group
> Provider">composite-user-group-provider</property>
> <property name="Authorizations
> File">./conf/authorizations.xml</property>
> <property name="Initial Admin Identity">CN=nifi_admin,
> OU=nifi</property>
> <property name="Legacy Authorized Users File"></property>
> <property name="Node Identity 1"></property>
> <property name="Node Group"></property>
> </accessPolicyProvider>
> <authorizer>
> <identifier>managed-authorizer</identifier>
> <class>org.apache.nifi.authorization.StandardManagedAuthorizer</class>
> <property name="Access Policy
> Provider">file-access-policy-provider</property>
> </authorizer>
> </authorizers>
> {code}
> Extract of NiFi nifi-app.log:
>
> {noformat}
> 2021-02-16 06:44:45,813 DEBUG [ (ldap-user-group-provider) - background sync
> thread] o.a.n.ldap.tenants.LdapUserGroupProvider
> -------------------------------------
> 2021-02-16 06:44:45,813 DEBUG [ (ldap-user-group-provider) - background sync
> thread] o.a.n.ldap.tenants.LdapUserGroupProvider Loaded the following users
> from LDAP:
> 2021-02-16 06:44:45,813 DEBUG [ (ldap-user-group-provider) - background sync
> thread] o.a.n.ldap.tenants.LdapUserGroupProvider -
> identifier[e4e7bd27-cad9-37c1-af53-a5fb7898de66],
> identity[CN=Peter,OU=Development,OU=Users,DC=domain,DC=internal]
> 2021-02-16 06:44:45,813 DEBUG [ (ldap-user-group-provider) - background sync
> thread] o.a.n.ldap.tenants.LdapUserGroupProvider -
> identifier[1f8d8309-31d9-3831-a3c0-2a9909500d7f],
> identity[CN=Frank,OU=Development,OU=Users,DC=domain,DC=internal]
> 2021-02-16 06:44:45,813 DEBUG [ (ldap-user-group-provider) - background sync
> thread] o.a.n.ldap.tenants.LdapUserGroupProvider -
> identifier[7c635418-5897-32a9-8e5b-5a7d9594b7f9],
> identity[CN=John,OU=Users,DC=domain,DC=internal]
> 2021-02-16 06:44:45,813 DEBUG [ (ldap-user-group-provider) - background sync
> thread] o.a.n.ldap.tenants.LdapUserGroupProvider
> --------------------------------------
> 2021-02-16 06:44:45,813 DEBUG [ (ldap-user-group-provider) - background sync
> thread] o.a.n.ldap.tenants.LdapUserGroupProvider Loaded the following groups
> from LDAP:
> 2021-02-16 06:44:45,814 DEBUG [ (ldap-user-group-provider) - background sync
> thread] o.a.n.ldap.tenants.LdapUserGroupProvider -
> identifier[f26c7633-396e-3bdd-83b3-1e395606346d],
> name[CN=GG_NIFI_Admins,OU=NIFI_App_Groups,OU=Nifi,OU=Admin
> Rights,OU=Groups,DC=domain,DC=internal],
> users[7c635418-5897-32a9-8e5b-5a7d9594b7f9]
> 2021-02-16 06:44:45,814 DEBUG [ (ldap-user-group-provider) - background sync
> thread] o.a.n.ldap.tenants.LdapUserGroupProvider -
> identifier[39854ab9-993e-3523-8c52-193e7e1fdb89],
> name[CN=GG_NIFI_Users,OU=NIFI_App_Groups,OU=Nifi,OU=Admin
> Rights,OU=Groups,DC=domain,DC=internal],
> users[1f8d8309-31d9-3831-a3c0-2a9909500d7f,
> e4e7bd27-cad9-37c1-af53-a5fb7898de66]
> 2021-02-16 06:44:45,814 DEBUG [ (ldap-user-group-provider) - background sync
> thread] o.a.n.ldap.tenants.LdapUserGroupProvider
> --------------------------------------{noformat}
> Extract of NiFi nifi-user.log:
>
> {noformat}
> 2021-02-15 14:07:59,252 INFO [NiFi Web Server-170]
> o.a.n.w.s.NiFiAuthenticationFilter Attempting request for (<JWT token>) GET
> https://nifi.domain.internal:9443/nifi-api/flow/current-user (source ip:
> X.Y.Z.W)
> 2021-02-15 14:07:59,260 INFO [NiFi Web Server-170]
> o.a.n.w.s.NiFiAuthenticationFilter Authentication success for
> cn=John,ou=Users,ou=domain,ou=internal
> 2021-02-15 14:07:59,301 INFO [NiFi Web Server-170]
> o.a.n.w.a.c.AccessDeniedExceptionMapper
> identity[cn=John,ou=Users,ou=domain,ou=internal], groups[] does not have
> permission to access the requested resource. Unknown user with identity
> 'cn=John,ou=Users,ou=domain,ou=internal'. Returning Forbidden response.
> {noformat}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)