Pentaho BI-Server autenticando no LDAP

Postado em Atualizado em

Demorei um pouco para postar isso, mas agora vou documentar o processo que fiz para autenticar o Pentaho BI-Server no LDAP e recuperar os papéis do LDAP para podermos setar as permissões. Podemos dizer que autenticar é a parte mais fácil, recuperar os papéis é que exige um pouco mais de atenção.

Peço que tenham muita ATENÇÃO nos detalhes, pois eles que fizeram eu quebrar um pouco a cabeça para deixar tudo redondo.

Infelizmente não achei um site definitivo na internet que mostrava todos os passos, tive que fazer um catado na internet para conseguir chegar ao objetivo.

Desde já agradeço ao Caio (Professor Corujá), pela indicação de um site em Francês que ajudou bastante, e aos meus amigos de trabalho Diego, Guto Maia, Thiago Lechuga e Gabriela Ozeias da 4Linux que me deram uma força no JAVA e LDAP.

Usei a versão 3.7 do bi-server e usei um OpenLDAP no Linux.

Vamos lá.

1 – O primeiro passo é entender como está a sua árvore do LDAP para poder recuperar os usuários e os grupos.

Vamos imaginar que a estrutura do nosso LDAP esteja da seguinte maneira:

  • dc=empresa,dc=com,dc=br: Essa é a nossa raiz do LDAP.
  • cn=USERS: Essa é a cn onde estão os nossos usuários
  • ou=GROUPS: Essa é a ou onde estão os grupos que vão servir de papéis para o nosso Pentaho BI Server.

Um exemplo de um LDIF de nossa base é o seguinte:

# Minha empresa.com.br

dn: dc=empresa,dc=com,dc=br

objectClass: top

objectClass: organization

o: empresa.com.br

dc: Empresa

# admin, empresa.com.br

dn: cn=admin,dc=empresa,dc=com,dc=br

objectClass: organizationalRole

cn: admin

description: LDAP administrator

# GROUPS, empresa.com.br

dn: ou=GROUPS,dc=empresa,dc=com,dc=br

objectClass: top

objectClass: organizationalUnit

ou: GROUPS

# comercial, GROUPS, empresa.com.br

dn: cn=comercial,ou=GROUPS,dc=empresa,dc=com,dc=br

objectClass: posixGroup

cn: comercial

gidNumber: 10001

memberUid: fulano

memberUid: fulana

# pentaho-admin, GROUPS, empresa.com.br

dn: cn=pentaho-admin,ou=GROUPS,dc=empresa,dc=com,dc=br

objectClass: posixGroup

cn: comercial

gidNumber: 10001

memberUid: vader

# USERS, empresa.com.br

dn: cn=USERS,dc=empresa,dc=com,dc=br

cn: USERS

objectClass: top

# fulano, USERS, empresa.com.br

dn: cn=fulano,cn=USERS,dc=empresa,dc=com,dc=br

objectClass: posixAccount

objectClass: top

uid: fulano

uidNumber: 100

cn: fulano

# vader, USERS, empresa.com.br

dn: cn=vader,cn=USERS,dc=empresa,dc=com,dc=br

objectClass: posixAccount

objectClass: top

uid: vader

uidNumber: 110

cn: vader

Resumindo. Temos a raiz da nossa empresa, dentro dela temos o usuário admin, um grupo chamado comercial onde temos dois usuários, o fulano e a fulana, temos um grupo chamado pentaho-admin, onde temos o usuário vader, que fará o papel de administrador do Pentaho e temos o cadastro desses usuários dentro da cn USERS.

Agora que já conhecemos a nossa base de exemplo, podemo prosseguir com a configuração.

2 – Os arquivos do Pentaho BI Server que precisam ser modificados, estão na pasta biserver-ce/pentaho-solutions/system. Os arquivos são:

  • pentaho-spring-beans.xml
  • applicationContext-security-ldap.properties
  • applicationContext-spring-security-ldap.xml
  • applicationContext-spring-security.xml
  • pentaho.xml

3 – Editar o arquivo pentaho-spring-beans.xml.

Esse arquivo é o que controla onde o Pentaho BI Server vai recuperar os usuários e papéis que utilizará na para loguin e para controlar os acessos. Por padrão ele vem com o hibernate.

O arquivo original está assim:

<import resource=”sessionStartupActions.xml” />

<import resource=”applicationContext-spring-security.xml” />

<import resource=”applicationContext-common-authorization.xml” />

<import resource=”applicationContext-spring-security-hibernate.xml” />

<import resource=”applicationContext-pentaho-security-hibernate.xml” />

Precisamos mudar as linhas que chamam o hibernate para o ldap. O arquivo ficará da seguinte maneira:

<import resource=”sessionStartupActions.xml” />

<import resource=”applicationContext-spring-security.xml” />

<import resource=”applicationContext-common-authorization.xml” />

<import resource=”applicationContext-spring-security-ldap.xml” />

<import resource=”applicationContext-pentaho-security-ldap.xml” />

4 – Em versões antigas do BI Server, era necessário editar diretamente os arquivos xml para colocar os parâmetros do LDAP. De umas versões pra cá a coisa melhorou, e temos um arquivo onde podemos definir os parâmetros que serão substituídos pelas variáveis nos xml. Editem o arquivo applicationContext-security-ldap.properties.

Aqui vou colocar o arquivo conforme as configurações do nosso LDAP de exemplo.

contextSource.providerUrl=ldap\://10.0.0.1\:389/dc\=empresa,dc\=com,dc\=br

contextSource.userDn=cn\=admin,dc\=empresa,dc\=com,dc\=br

contextSource.password=123456

userSearch.searchBase=cn\=USERS

userSearch.searchFilter=(cn\={0})

populator.convertToUpperCase=true

populator.groupRoleAttribute=cn

populator.groupSearchBase=ou\=GROUPS

populator.groupSearchFilter=(memberUid\={1})

populator.rolePrefix=

populator.searchSubtree=true

allAuthoritiesSearch.roleAttribute=cn

allAuthoritiesSearch.searchBase=ou\=GROUPS

allAuthoritiesSearch.searchFilter=(objectClass\=posixGroup)

allUsernamesSearch.usernameAttribute=cn

allUsernamesSearch.searchBase=cn\=USERS

allUsernamesSearch.searchFilter=(objectClass\=posixAccount)

ATENÇÃO nos detalhes desse arquivo, pois eles fazem a diferença. A \ sempre deve ser usada antes de um =, caso contrário o Spring Security vai interpretar o = como sendo parte do parâmetro, e não vai ter nenhum erro no log que vai te mostrar isso.

A explicação de cada seção:

contextSource.providerUrl=ldap\://10.0.0.1\:389/dc\=empresa,dc\=com,dc\=br

contextSource.userDn=cn\=admin,dc\=empresa,dc\=com,dc\=br

contextSource.password=123456

Aqui é necessário colocar o endereço do LDAP, porta e raiz do LDAP. Informar também o usuário admin do LDAP e a senha dele.

userSearch.searchBase=cn\=USERS

userSearch.searchFilter=(cn\={0})

Aqui as variáveis onde ele procurará pelos usuários. Nossos usuários estão uma cn USERS e o nome dos usuários estão em cn também. Colocando 0 ele procura pelo DN completo do usuário.

populator.convertToUpperCase=true

populator.groupRoleAttribute=cn

populator.groupSearchBase=ou\=GROUPS

populator.groupSearchFilter=(memberUid\={1})

populator.rolePrefix=

populator.searchSubtree=true

Essa é a seção onde ele procurará os grupos do LDAP. Os nomes dos nossos grupos estão em um atributo cn, dentro de uma ou GROUPS. O campo dentro dos grupos que identificam os usuário pertencentes ao grupo é o atributo memberUid. Colocando 1 ele procura somente pelo nome do usuário, se deixasse em 0 ele procuraria pelo DN completo.

allAuthoritiesSearch.roleAttribute=cn

allAuthoritiesSearch.searchBase=ou\=GROUPS

allAuthoritiesSearch.searchFilter=(objectClass\=posixGroup)

allUsernamesSearch.usernameAttribute=cn

allUsernamesSearch.searchBase=cn\=USERS

allUsernamesSearch.searchFilter=(objectClass\=posixAccount)

Essa duas seções são usadas para resgatar a lista de usuário e grupos do LDAP. Aqui não é a parte de autenticação, é para trazer a lista de usuários e grupos quando clicamos com o botão direito em uma pasta dentro do BI Server e clicamos em propriedades para setar quem pode acessar aquela pasta. Resumindo, é para trazer a lista de atribuição de permissões.

5 – No modo padrão de autenticação do Pentaho BI Server, ele procura por um grupo/papel chamado Authenticated. Normalmente não temos esse papel no LDAP, mas ele é necessário para que o usuário possa autenticar-se no BI Server. Para isso, podemos editar o arquivo applicationContext-spring-security-ldap.xml e colocar o defaultRole:

<!– be sure to escape ampersands –>

<bean id=”populator”

class=”org.springframework.security.ldap.populator.DefaultLdapAuthoritiesPopulator”>

<constructor-arg index=”0″>

<ref local=”contextSource” />

</constructor-arg>

<constructor-arg index=”1″ value=”${populator.groupSearchBase}” />

<property name=”groupRoleAttribute” value=”${populator.groupRoleAttribute}” />

<!– {0} will be replaced with user DN; {1} will be replaced with username –>

<property name=”groupSearchFilter” value=”${populator.groupSearchFilter}” />

<property name=”rolePrefix” value=”${populator.rolePrefix}” />

<property name=”convertToUpperCase” value=”${populator.convertToUpperCase}” />

<property name=”searchSubtree” value=”${populator.searchSubtree}” />

<property name=”defaultRole” value=”Authenticated” />

</bean>

Com isso, todo usuário receberá por padrão o papel Authenticated para poder se logar, depois será associado outros grupos conforme as configurações que vamos fazer nos outros arquivos.

6 – Agora precisamos definir o acesso de determinados grupos para alguns recursos do BI Server e começar a definir quem vai ser o grupo administrador. Isso é feito no arquivo applicationContext-spring-security.xml.

É necessário acrescentar ou substituir os grupos conforme for necessário. Nesse caso, o mais importante é adicionar o grupo de administrador, pois se o usuário não estiver associado a nenhum outro grupo por padrão, ele sempre estará no grupo Autenticated.

CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON

\A/docs/.*\Z=Anonymous,Authenticated

\A/mantlelogin/.*\Z=Anonymous,Authenticated

\A/mantle/mantleloginservice/*\Z=Anonymous,Authenticated

\A/mantle/.*\Z=Anonymous,Authenticated

\A/welcome/.*\Z=Anonymous,Authenticated

\A/public/.*\Z=Anonymous,Authenticated

\A/login.*\Z=Anonymous,Authenticated

\A/ping/alive.gif.*\Z=Anonymous,Authenticated

\A/j_spring_security_check.*\Z=Anonymous,Authenticated

\A/getimage.*\Z=Anonymous,Authenticated

\A/getresource.*\Z=Anonymous,Authenticated

\A/admin.*\Z=PENTAHO-ADMIN

\A/auditreport.*\Z=PENTAHO-ADMIN

\A/auditreportlist.*\Z=PENTAHO-ADMIN

\A/versioncontrol.*\Z=PENTAHO-ADMIN

\A/propertieseditor.*\Z=PENTAHO-ADMIN

\A/propertiespanel.*\Z=PENTAHO-ADMIN

\A/subscriptionadmin.*\Z=PENTAHO-ADMIN

\A/resetrepository.*\Z=PENTAHO-ADMIN

\A/viewaction.*solution.admin.*\Z=PENTAHO-ADMIN

\A/scheduleradmin.*\Z=PENTAHO-ADMIN

\A/publish.*\Z=PENTAHO-ADMIN

\A/.*\Z=Authenticated

Na seção de Administrador, nós colocamos o grupo PENTAHO-ADMIN do LDAP, e precisa ser colocado em caixa alta, caso contrário ele não vai reconhecer. Nesse caso nem precisamos informar o grupo comercial, pois os outros usuário assumirão o grupo Authenticated. Caso fosse necessário, era só colocar uma vírgula e colocar o grupo/papel COMERCIAL depois dos Authenticated.

7 – Para finalizar, precisamos acertar as ACL’s de controle do BI Server, para dizer exatamente quem é o grupo de administradores e o seus privilégios. Para isso, precisamos editar o arquivo pentaho.xml.

<default-acls>

<acl-entry role=”PENTAHO-ADMIN” acl=”FULL_CONTROL” />

<acl-entry role=”Authenticated” acl=”EXECUTE” />

</default-acls>

<overrides>

<file path=”/pentaho-solutions/admin”>

<acl-entry role=”PENTAHO-ADMIN” acl=”FULL_CONTROL” />

</file>

</overrides>

<acl-voter>

<!– What role must someone be in to be an ADMIN of Pentaho –>

<admin-role>PENTAHO-ADMIN</admin-role>

</acl-voter>

Os nomes dos grupos precisam estar em caixa alta também.

Com isso a nossa configuração do LDAP está completa. Basta reiniciarmos o biserver-ce e testar no browser. Se tudo der certo, no nosso exemplo o vader entrará com poderes administrativos, o os outros usuários fulano e fulana com acesso comum.

O vader vai poder clicar em propriedades das pastas e setar quem pode ou não acessar determinadas pastas, conforme os usuários e grupos que serão resgatados do LDAP.

Espero que esse tutorial ajude, pois reuniu vários pedaços de outros tutorias da internet.

Segue as referências:

http://blog.netapsys.fr/index.php/post/2010/08/12/Comment-connecter-Pentaho-a-un-LDAP

http://wiki.pentaho.com/display/ServerDoc2x/Active+Directory+configuration+example+%28CE+3.0RC1%29+2.x-3.0.x

http://nextcoder.com/?p=172

http://wiki.pentaho.com/display/ServerDoc2x/Changing+to+the+LDAP+Security+DAO

11 comentários em “Pentaho BI-Server autenticando no LDAP

    Caio Moreno de Souza disse:
    2 de maio de 2011 às 23:38

    Cesar,

    Parabéns!!! Já divulguei no meu blog.

    http://blog.professorcoruja.com/2011/05/pentaho-bi-server-autenticando-no-ldap.html

    Abraços,

    Caio

    Joel Ferreira disse:
    28 de novembro de 2011 às 8:14

    Bom dia,

    Estou a seguir o seu tutorial de modo a conseguir ligar o meu Pentaho também ao LDAP. No entanto continuo a obter Login Error após seguir os passos indicados. Consegue-me indicar se existe algum log de erro, para perceber se ao menos o pentaho está a conseguir ligar-se ao servidor LDAP, para tentar detectar o meu problema?

    Obrigado.

      Cesar respondido:
      28 de novembro de 2011 às 11:36

      Bom dia Joel.

      Você tem o próprio log do pentaho, que fica em tomcat/bin/pentaho.log. Mas você precisa deixar ele no modo
      DEBUG para poder ver todo o processo de autenticação e tentar descobrir onde está o erro. Para deixar ele
      no modo de DEBUG, você vai ter que editar o seguinte arquivo:
      /tomcat/webapps/pentaho/WEB-INF/classes/log4j.xml

      Nesse arquivo, vc modifica essas seções:

      No lugar de ERROR coloca DEBUG. Reinicie o BI-Server, e veja o log. Só fique atento pois ele
      registra muita coisa.

      Abraços

        Joel Ferreira disse:
        29 de novembro de 2011 às 7:00

        Cesar, muito obrigado pela resposta rápida e útil! No log encontrei algures isto “LDAP: error code 49” e após alguma pesquisa penso que isso significa problemas nas credenciais, por isso deduzo que o problema deva estar no ficheiro com os settings do meu servidor LDAP. Vamos ver…

        Joel Ferreira disse:
        29 de novembro de 2011 às 8:46

        Já consegui a autenticação🙂 Vou agora trabalhar na parte dos grupos e permissões. Obrigado novamente pela ajuda!

        Cesar respondido:
        29 de novembro de 2011 às 8:55

        Bacana Joel.

        Se precisar de mais alguma coisa é só falar.

        Abraços

    Joel Ferreira disse:
    29 de novembro de 2011 às 14:28

    Cesar :
    Bacana Joel.
    Se precisar de mais alguma coisa é só falar.
    Abraços

    Olá Cesar, uma questão: como disse anteriormente tenho autenticação a funcionar perfeitamente. Agora como associo os users LDAP aos roles na Administration Console. É que na Administation Console os utilizadores LDAP não estão visiveis. Como funciona esse processo? Penso que seja o Passo 6 do seu texto que faz isso mas não entendi ainda muito bem o que tenho de fazer no meu caso nesse ficheiro. Imagine que tenho o user “user1” e quero colocá-lo com o role “role1”.

      Cesar respondido:
      30 de novembro de 2011 às 7:19

      Joel. Do jeito que foi feito, os usuários e grupos não aparecem no Administration Console (PAC). Eles aparecem no PUC quando você vai definir as permissões em uma pasta ou em um arquivo. Do jeito que eu fiz, os usuário precisam ser administrados por uma ferramenta de administração de LDAP. O grupo (role) Pentaho-admin que eu coloquei ali, está criado no LDAP também. Não sei te responder como fazer eles aparecerem no PAC e se isso é possível. Do jeito que uso, eu administro os usuários pelo phpldapadmin, pois os usuário são usados para autenticar em todas os sistemas da empresa. Abraços

      Joel Ferreira disse:
      30 de novembro de 2011 às 10:41

      Ok Cesar, obrigado pela explicação, ou seja no seu caso um grupo no LDAP = Pentaho Role. No meu caso eu não queria utilizar os grupos da AD, ou seja, utilizar directamente os roles do Pentaho para adicionar utilizadores LDAP lá, pelo menos para já. De qualquer modo a sua abordagem é a mais correcta.

      Posso colocar mais questões de Pentaho? Minha experiência com o Pentaho é recente como já deve ter notado, então tenho bastantes dúvidas. Desta vez relacionadas com xaction. Tenciono enviar reports “prtp” como “pdf” para emails de utilizadores que estão na BD. Encontrei exemplos de como fazê-lo mas estou com alguns problemas. O último está explicado neste fórum (deduzo que o Cesar também seja utilizador do mesmo): http://forums.pentaho.com/showthread.php?72223-PRPT-Report-Burst

      Se quiser indique-me o seu email para não “spammar” o seu blog!🙂 Muito obrigado. Abraço.

        Cesar respondido:
        15 de dezembro de 2011 às 14:26

        Olá Joel. Desculpe a demora, meu filho nasceu esses dias eu fiquei meio Off.

        Você pode postar as dúvidas que quiser, se quiser conversar por e-mail, pode mandar no cesar.domingos@gmail.com.

        Sobre a questão que vc postou, o Xaction não são o meu forte, eu precisaria pesquisar essa sua dúvida. Assim que eu tiver um tempo, tendo dar uma olhada.

        Abraços

    Hebert disse:
    3 de dezembro de 2013 às 14:20

    Olá Cesar,
    estou utilizando a versão (biserver-ce-4.8.0-stable) e realizei configurações
    baseada nos seu tutorial (que por sinal é muito bom🙂 )
    para realizar autenticação via LDAP. O login no Pentaho via LDAP está
    funcionando, entretanto estou com muita dificuldade para que as permissões dos cubos funcionem corretamente.
    Alterei o arquivo *modrian.xml para prover permissões para determinados grupos
    de usuarios existentes no meu LDAP, entretanto
    no saiku mesmo que Modrian Schema possua SchemaGrant access=”none” os cubos são
    visiveis para todos os usuários e no jPivot ocorre o contrario, ele nao permite
    visualizar nenhum cubo mesmo que possua SchemaGrant access=”all”.

    Aparentemente os usuarios logados estão com as respectivas roles pois exite a requisição http://localhost:8080/pentaho/content/saiku/session
    que indica a sessão do usuário logado e ela está indicando a role correta.

    {“username”:”existinguser”,”roles”:[“PENTAHO”],”sessionid”:”cec12a73-551d-44b2-9\
    768-94bcf3c78913″}

    O log nao apresenta nenhum erro aparente apenas WARNs
    http://pastebin.com/Hx4uUbEZ

    Alguém por favor tem alguma idéia do que preciso configurar a mais para que as
    permissões funcionem corretamente??

    Muito obrigado

    *modrian.xml

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s