LINUX.ORG.RU
ФорумAdmin

Помогите настроить аутентификацию в ActiveMQ через LDAP

 , ,


0

1

Пытался настраивать по http://activemq.apache.org/cached-ldap-authorization-module.html , но там примеры противоречат друг другу, а предлагаемый для OpenLDAP конфиг с ним несовместим.

Я поставил на локалхост OpenLDAP с пустой базой, заменил параметры в slapd.conf на рекомендованные

suffix          "dc=activemq,dc=apache,dc=org"
rootdn          "cn=admin,dc=activemq,dc=apache,dc=org"
rootpw          {SSHA}lfAYn54xCFghgQv5B2Kqn3d3eLojqxtS
#пароль "sunflower"

Запустил OpenLDAP, импортировал рекомендованный activemq-openldap.ldif с некоторыми изменениями:

# Убрал, вызывало ошибку 53 "no global superior knowledge"
#dn: dc=apache,dc=org
#objectClass: dcObject
#objectClass: organization
#dc: apache
#o: Apache

dn: dc=activemq,dc=apache,dc=org
objectClass: dcObject
# container отсутствует в OpenLDAP, сменил на organization, 
#objectClass: container
objectClass: organization
objectClass: top
# Несовместимо с objectClass=organization, сменил на o=activemq
#cn: activemq
o: activemq
dc: activemq
(Все пароли также «sunflower».)

Создал конфиг:

<?xml version="1.0" encoding="UTF-8"?>
<beans
  xmlns="http://www.springframework.org/schema/beans"
  xmlns:amq="http://activemq.apache.org/schema/core"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
  http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd">

  <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"/>

  <broker useJmx="false"  xmlns="http://activemq.apache.org/schema/core" persistent="false">

      <plugins>
          <authorizationPlugin>
              <map>
                  <cachedLDAPAuthorizationMap
                      connectionURL="ldap://localhost:389"
                      connectionUsername="cn=admin,dc=activemq,dc=apache,dc=org"
                      connectionPassword="sunflower"
                      queueSearchBase="ou=Queue,ou=Destination,ou=ActiveMQ,dc=activemq,dc=apache,dc=org"
                      topicSearchBase="ou=Topic,ou=Destination,ou=ActiveMQ,dc=activemq,dc=apache,dc=org" 
                      tempSearchBase="ou=Temp,ou=Destination,ou=ActiveMQ,dc=activemq,dc=apache,dc=org"
                      refreshInterval="300000"
                      legacyGroupMapping="false"
                  />
              </map>
          </authorizationPlugin>
      </plugins>

    <transportConnectors>
      <transportConnector uri="tcp://localhost:61616"/>
    </transportConnectors>

  </broker>

    <import resource="jetty.xml"/>
</beans>

В jetty.xml отключил аутентификацию, чтобы не мешала.

Запускаю ActiveMQ, веб интерфейс работает.

В терминале набираю

curl -XPOST -d "body=message" http://admin:sunflower@localhost:8161/api/message?destination=queue://BAR 

Получаю ошибку:

<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>Error 500 Server Error</title>
</head>
<body><h2>HTTP ERROR 500</h2>
<p>Problem accessing /api/message. Reason:
<pre>    Server Error</pre></p><h3>Caused by:</h3><pre>javax.servlet.ServletException: Could not post JMS message: javax.jms.JMSSecurityException: User is not authenticated.
...
Та же ошибка в консоли с activemq.

В чём проблема? Куда копать?

ОТВЕТ: У Jetty своя независимая аутентификация. В сети есть несколько взаимоисключающих руководств.

(Кроме того, если добавляешь плагин для авторизации, обязательно нужен и плагин для аутентификации.)

P.S. Заодно вопрос: в DN cn=read,cn=TEST.FOOBAR,ou=Queue,ou=Destination,ou=ActiveMQ,dc=activemq,dc=apache,dc=org есть дополнительный атрибут member равный cn=notthere,ou=Group,ou=ActiveMQ,dc=activemq,dc=apache,dc=org

ActiveMQ на него ругается при запуске:

ERROR | Policy not applied! Unknown member [cn=notthere,ou=Group,ou=ActiveMQ,dc=activemq,dc=apache,dc=org, cn=read,cn=TEST.FOOBAR,ou=Queue,ou=Destination,ou=ActiveMQ,dc=activemq,dc=apache,dc=org] in policy entry {}
javax.naming.NameNotFoundException: [LDAP: error code 32 - No Such Object]; remaining name 'cn=notthere,ou=Group,ou=ActiveMQ,dc=activemq,dc=apache,dc=org'
Без него ошибка исчезает, но авторизация всё равно не работает.

Зачем он нужен?

ОТВЕТ: не нужен, спасибо Ivan_qrt.

★★★

Последнее исправление: olegd (всего исправлений: 4)
Ответ на: комментарий от olegd

Строка 185.

Здесь вот так:

175 dn: cn=read,cn=TEST.FOOBAR,ou=Queue,ou=Destination,ou=ActiveMQ,dc=activemq,dc=apache,dc=org
176 cn: read
177 member: cn=users,ou=Group,ou=ActiveMQ,dc=activemq,dc=apache,dc=org
178 member: cn=admins,ou=Group,ou=ActiveMQ,dc=activemq,dc=apache,dc=org
179 member: uid=jdoe,ou=User,ou=ActiveMQ,dc=activemq,dc=apache,dc=org
180 member: cn=notthere,ou=Group,ou=ActiveMQ,dc=activemq,dc=apache,dc=org
181 objectClass: groupOfNames
182 objectClass: top
183 
184 dn: cn=write,cn=TEST.FOOBAR,ou=Queue,ou=Destination,ou=ActiveMQ,dc=activemq,dc=apache,dc=org
185 cn: write
186 objectClass: groupOfNames
187 objectClass: top
188 member: cn=users,ou=Group,ou=ActiveMQ,dc=activemq,dc=apache,dc=org
189 member: cn=admins,ou=Group,ou=ActiveMQ,dc=activemq,dc=apache,dc=org
190 member: uid=jdoe,ou=User,ou=ActiveMQ,dc=activemq,dc=apache,dc=org

Если ты имеешь ввиду 180 member: cn=notthere,ou=Group,ou=ActiveMQ,dc=activemq,dc=apache,dc=org, то это не группа, а ссылка на неё. Ссылка есть, группы нет. Вот и ругается.

Или на стороне LDAP для admin и jdoe всё нормально

Ну это проверяется ldapsearch'ем или ldapwhoami.

проблема вызвана невычищенными средствами аутентификации на стороне ActiveMQ?

Я думаю, что так. Но я никогда не общался с activemq.

Логин/пароль, которые передаются курлу - это пользователи activemq? Он должен их искать по лдапу и проверять авторизацию? Или это какие-то встроенные пользователи?

Если первое, то я не вижу никаких настроек для поиска пользователей, типа objectClass'а, атрибутов для логина/пароля, группы, контейнера с пользователями и т.п.

Если второе, то скорее всего туда и надо копать.

Ivan_qrt ★★★★★
()
Ответ на: комментарий от Ivan_qrt

В принципе, этот notthere, можно просто удалить и не парится.

Ivan_qrt ★★★★★
()
Ответ на: комментарий от Ivan_qrt

это не группа, а ссылка на неё. Ссылка есть, группы нет. Вот и ругается.

Я не понял, что ему не нравится ссылка на несуществующее. Тогда понятно.

olegd ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.