Comunidade

Configurando Integração LDAP / Active Directory no Liferay

Guia de configuração de autenticação e importação de usuários via LDAP/AD no Liferay — incluindo os ajustes que resolvem problemas de timeout e login intermitente.
SEA Tecnologia · Equipe de Infraestrutura

Esta configuração é o resultado de vários problemas reais enfrentados em campo: erros de timeout no log, login do portal que funcionava por um período e parava, e usuários que conseguiam logar enquanto outros não. Os valores abaixo são o nosso padrão recomendado para instalação em clientes.


Índice
  • Pré-requisitos e conceitos
  • Validando o AD com ldapsearch (antes de tudo)
  • Autenticação de usuário (Instância)
  • Habilitando o LDAP
  • Conexão com o servidor
  • Filtros de busca (usuários)
  • Mapeamento de usuário
  • Preferências de conexão (o ponto crítico)
  • Exportação
  • Importação
  • Verificação e troubleshooting



1. Pré-requisitos e conceitos
  • Acesso ao servidor LDAP/AD: URL, porta (geralmente 389), DN base, e um usuário de serviço (bind) com permissão de leitura.
  • userAccountControl=512: indica que a conta de usuário está habilitada no Active Directory.
  • !(pwdLastSet=0): exclui contas cuja senha nunca foi definida.
  • Atenção aos atributos: os campos variam por cliente. Por exemplo, o e-mail pode usar "mail" em vez de "userprincipalname". Sempre verifique antes.

Credenciais: o usuário e a senha de conexão (bind) ficam no Passbolt da SEA. Nunca coloque essas credenciais no artigo do fórum nem em arquivos versionados.



2. Validando o AD com ldapsearch (antes de tudo)
Antes de configurar no portal, valide a conexão e os atributos pela linha de comando. Instale o cliente:
1
yum install -y openldap-clients
2
ldapsearch --version

Buscar um usuário específico pelo username (sAMAccountName):
1
ldapsearch -x -H ldap://dc1.exemplo.gov.br:389 -D "{usuario_bind}" -w {senha} \
2
  -b "ou=cliente,dc=exemplo,dc=gov,dc=br" "sAMAccountName=bruno.alves"

Buscar pelo e-mail (userprincipalname):
1
ldapsearch -x -H ldap://dc1.exemplo.gov.br:389 -D "{usuario_bind}" -w {senha} \
2
  -b "ou=cliente,dc=exemplo,dc=gov,dc=br" "userprincipalname=bruno.alves@exemplo.gov.br"

Listar e contar usuários de uma OU:
1
ldapsearch -x -H ldap://dc1.exemplo.gov.br:389 -D "{usuario_bind}" -w {senha} \
2
  -b "ou=cliente,dc=exemplo,dc=gov,dc=br" | grep userPrincipalName | nl

Por que fazer isso primeiro: confirma que a rede, o bind e os atributos estão corretos. Se o ldapsearch não retornar, o problema está no AD/rede — não adianta configurar no Liferay ainda.



3. Autenticação de usuário (Instância)
Painel de Controle > Configurações da Instância > Autenticação de Usuário > aba Geral:
  • Como os usuários se autenticam?: Por Nome de Usuário
  • Na aba Geral, desmarque todas as checkbox. Nas outras abas, mantenha a configuração padrão.



4. Habilitando o LDAP
Painel de Controle > Configurações da Instância > LDAP > aba Geral:
  • Habilitar: marcado
  • Obrigatório: desmarcado
  • Use a política de senha do LDAP: marcado
  • Método: Vincular
  • Algoritmo de criptografia de senha: Nenhum



5. Conexão com o servidor
Aba Servidores > Conexão. Clique em Adicionar e preencha:
  • Configuração padrão: Microsoft Active Directory Server (se for AD)
  • URL do fornecedor base: ldap://dc1.exemplo.gov.br:389
  • DN Base: ou=cliente,dc=exemplo,dc=gov,dc=br
  • Usuário de conexão LDAP (bind): Acessar Passbolt da SEA
  • Senha de conexão LDAP: Acessar Passbolt da SEA

Use o botão Testar Conexão LDAP para validar antes de prosseguir.


6. Filtros de busca (usuários)
Aba Servidores > Usuários:
Filtro de busca da autenticação por nome de usuário:
1
(&(&(objectClass=person)(sAMAccountName=@screen_name@))(userAccountControl=512))

Filtro de busca para a importação:
1
(&(&(&(objectClass=Person)(!(objectClass=Computer)))(userAccountControl=512))(!(pwdLastSet=0)))

Tradução dos filtros: importa apenas pessoas (não computadores), com a conta habilitada (userAccountControl=512) e com senha já definida (pwdLastSet diferente de 0).



7. Mapeamento de usuário
Aba Servidores > Mapeamento do usuário:
  • Nome de usuário: sAMAccountName
  • Endereço de email: userprincipalname
  • Senha: userPassword
  • Nome: givenName
  • Segundo Nome: middleName
  • Sobrenome: sn
  • Nome Completo: cn
  • Cargo: title
  • Grupos: sem configuração (os grupos não são importados neste padrão)

Lembre-se: confirme cada atributo com o resultado do ldapsearch. Em alguns clientes o e-mail é o atributo "mail".



8. Preferências de conexão (o ponto crítico)
Este é o ajuste que resolveu o maior dos nossos problemas. O atributo com.sun.jndi.ldap.connect.pool vem habilitado por padrão e causa logins intermitentes e timeouts. Desative-o.
1
com.sun.jndi.ldap.connect.pool=false
2
com.sun.jndi.ldap.connect.timeout=5000
3
com.sun.jndi.ldap.read.timeout=5000

Sintoma típico do pool ligado: login funciona por um tempo e depois para; alguns usuários autenticam e outros não; timeouts aparecem no log. Com o pool desativado e os timeouts definidos, o comportamento estabiliza.



9. Exportação
Aba Exportar:
  • Desabilite todas as opções. Não queremos que o Liferay escreva de volta no AD.



10. Importação
Aba Importar:
  • Habilitar Importação: marcado (deixe apenas esta marcada; desabilite as demais checkbox)
  • Intervalo de importação: 90000
  • Método de importação: Usuário
  • Estratégia de sincronização do usuário: Tipo de autenticação



11. Verificação e troubleshooting
  • Login intermitente / timeouts no log: confirme com.sun.jndi.ldap.connect.pool=false e os timeouts de connect/read em 5000.
  • Usuário não loga: valide com ldapsearch se a conta tem userAccountControl=512 (habilitada) e pwdLastSet diferente de 0.
  • E-mail não importa: verifique se o atributo correto é userprincipalname ou mail no AD do cliente.
  • Conexão falha no Testar: cheque rede/porta 389, o DN base e as credenciais de bind (Passbolt).
  • Nenhum usuário importado: revise o filtro de importação e o DN base; teste o mesmo filtro via ldapsearch.


SEA Tecnologia — Equipe de Infraestrutura · Artigo do fórum de Infraestrutura · Integração LDAP no Liferay
Isaac de Moraes
5/4/23