I'm in the process of upgrading from 5.5.1 to the 5.7.0 release and would like to try taking advantage of our ldap directory for queue authorizations (we are already using the jaasAuthenticationPlugin against our openldap server for authenticating connections but are currently using a static <authorizationMap><authorizationEntries><authorizationEntry ...> setup).

I've been trying to follow http://activemq.apache.org/cached-ldap-authorization-module.html but the documentation in out of date and contains sample configs that just don't work. After much google searching, I eventually figured out that instead of the documented baseDn attribute, I had to use queueSearchBase, topicSearchBase & tempSearchBase giving me a config looking like the following:

        <plugins>
            <jaasAuthenticationPlugin configuration="ActiveMQ" />
            <authorizationPlugin>
                <map>
                <cachedLDAPAuthorizationMap
                   connectionURL="ldap://ldap:389";
connectionUsername="uid=activemq,ou=Systems,dc=myorg,dc=net"
                   connectionPassword="Secret"
                   refreshInterval="300000"
queueSearchBase="ou=Queues,ou=Destinations,ou=ActiveMQ,ou=Systems,dc=myorg,dc=net"
topicSearchBase="ou=Topics,ou=Destinations,ou=ActiveMQ,ou=Systems,dc=myorg,dc=net"
tempSearchBase="ou=Temp,ou=Destinations,ou=ActiveMQ,ou=Systems,dc=myorg,dc=net"
                   />
                </map>
            </authorizationPlugin>
        </plugins>

starting activemq in console mode, it starts cleanly enough, and from examining the logging from openldap, I can see that an ldap connection is made and several searches done returning a number of results, for example:

Dec 7 17:24:21 ldap slapd[7553]: conn=3512 op=6 SRCH base="ou=Topics,ou=Destinations,ou=ActiveMQ,ou=Systems,dc=myorg,dc=net" scope=2 deref=3 filter="(cn=admin)" Dec 7 17:24:21 ldapslapd[7553]: conn=3512 op=6 ENTRY dn="cn=admin,cn=activemq.advisory.$,ou=topics,ou=destinations,ou=activemq,ou=systems,dc=myorg,dc=net" Dec 7 17:24:21 ldapslapd[7553]: conn=3512 op=6 ENTRY dn="cn=admin,cn=activemq.advisory.connection,ou=topics,ou=destinations,ou=activemq,ou=systems,dc=myorg,dc=net"

The entries returned are groupOfNames entries created identically to the
cn=admin,cn=TEST.FOOBAR,ou=Queue,ou=Destination,ou=ActiveMQ,dc=activemq,dc=apache,dc=org entry in the sample file https://svn.apache.org/repos/asf/activemq/trunk/activemq-core/src/test/resources/org/apache/activemq/security/activemq-openldap.ldif

The 'member' entries are further groupOfNames entries defining the roles as in the sample ldif file, and I have a userid called activemq that is a member of the admin role.

By all accounts, everything should be ok, however the cachedLDAPAuthorizationMap does not authorized connections and I get errors such as the following:

WARN | Failed to add Connection ID:robdev.office.eseye.net-38820-1354901062452-5:1, reason: java.lang.SecurityException: User activemq is not authorized to create: topic://ActiveMQ.Advisory.Connection WARN | Async error occurred: java.lang.SecurityException: User activemq is not authorized to create: topic://ActiveMQ.Advisory.Connection java.lang.SecurityException: User activemq is not authorized to create: topic://ActiveMQ.Advisory.Connection at org.apache.activemq.security.AuthorizationBroker.addDestination(AuthorizationBroker.java:76) at org.apache.activemq.broker.BrokerFilter.addDestination(BrokerFilter.java:145)
......

Clearly there have been changes to the cachedLDAPAuthorizationMap since it was released in ActiveMQ 5.6 as highlighted by the inaccurate documentation, but is anyone using it with 5.7 and would be willing to point me in the right direction or share their config with me please ?

Thanks in advance,
Rob


Reply via email to