242 lines
13 KiB
Markdown
242 lines
13 KiB
Markdown
|
|
---
|
|||
|
|
title: Configuração de autenticação utilizando LDAP
|
|||
|
|
source: https://tdn.totvs.com/pages/viewpage.action?pageId=257623389
|
|||
|
|
path: \Plataforma Documentação técnica\Configuração\Configuração de Ambiente\Configuração de autenticação utilizando LDAP.md
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
Fique atento!
|
|||
|
|
|
|||
|
|
Esta página é válida a partir da atualização **Voyager (2.0)** do TOTVS Fluig.
|
|||
|
|
|
|||
|
|
Se você utiliza uma atualização anterior, acesse [Como configurar autenticação utilizando LDAP da atualização **1.6 até 1.8.2**](https://tdn.totvs.com/pages/viewpage.action?pageId=940288430).
|
|||
|
|
|
|||
|
|
- [Objetivo](#ConfiguraçãodeautenticaçãoutilizandoLDAP-Objetivo)
|
|||
|
|
- [Configuração](#ConfiguraçãodeautenticaçãoutilizandoLDAP-Configuração)
|
|||
|
|
- [Autenticação do usuário wcmadmin após a configuração de autenticação LDAP](#ConfiguraçãodeautenticaçãoutilizandoLDAP-AutenticaçãodousuáriowcmadminapósaconfiguraçãodeautenticaçãoLDAP)
|
|||
|
|
- [Cadastro dos usuários](#ConfiguraçãodeautenticaçãoutilizandoLDAP-Cadastrodosusuários)
|
|||
|
|
- [Propriedades de busca LDAP](#ConfiguraçãodeautenticaçãoutilizandoLDAP-PropriedadesdebuscaLDAP)
|
|||
|
|
- [Definindo pesquisa por papel (Defining Role Search)](#ConfiguraçãodeautenticaçãoutilizandoLDAP-Definindopesquisaporpapel(DefiningRoleSearch))
|
|||
|
|
- [Definindo pesquisa DN (Defining DN Search)](#ConfiguraçãodeautenticaçãoutilizandoLDAP-DefinindopesquisaDN(DefiningDNSearch))
|
|||
|
|
|
|||
|
|
# Objetivo
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
O objetivo deste guia é orientar o administrador sobre como configurar a plataforma para permitir acesso dos usuários através das credenciais existentes em um diretório, como o Active Directory, via protocolo LDAP (*Lightweight Directory Access Protocol*).
|
|||
|
|
|
|||
|
|
Uma vez realizada a configuração, os usuários deverão informar os dados de acesso do LDAP (usuário/senha) na tela de *login* para acessar a plataforma.
|
|||
|
|
|
|||
|
|
# Configuração
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
**01.** Edite o arquivo **standalone.xml** localizado na pasta [diretório\_instalação]\appserver\standalone\configuration.
|
|||
|
|
|
|||
|
|
**02.** Localize e substitua o trecho abaixo:
|
|||
|
|
|
|||
|
|
**standalone.xml**
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
<login-module code="com.totvs.foundation.auth.FoundationDatabaseServerLoginModule" flag="sufficient" module="com.totvs.foundation.auth">
|
|||
|
|
<module-option name="hashAlgorithm" value="MD5"/>
|
|||
|
|
<module-option name="hashEncoding" value="HEX"/>
|
|||
|
|
<module-option name="principalClass" value="com.totvs.technology.foundation.common.TOTVSTechPrincipal"/>
|
|||
|
|
</login-module>
|
|||
|
|
<login-module code="com.totvs.foundation.auth.FoundationJwtLoginModule" flag="sufficient" module="com.totvs.foundation.auth">
|
|||
|
|
<module-option name="password-stacking" value="useFirstPass"/>
|
|||
|
|
<module-option name="principalClass" value="com.totvs.technology.foundation.common.TOTVSTechPrincipal"/>
|
|||
|
|
</login-module>
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**03.** Informe os dados de acesso à fonte de dados LDAP, conforme o tipo de validação utilizado em seu Active Diretory:
|
|||
|
|
|
|||
|
|
- Caso seja utilizado o LDAP com necessidade de credencial, deve-se possuir as credenciais de um usuário válido e com permissão de consulta no diretório LDAP (Active Directory).
|
|||
|
|
|
|||
|
|
- Os dados de acesso devem ser informados nas propriedades **java.naming,security.principal** (*login*) e **bindCredential** (senha encriptada - veja abaixo como gerar a senha encriptada), após substituir pelo trecho abaixo.
|
|||
|
|
|
|||
|
|
**standalone.xml**
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
<login-module code="com.totvs.foundation.auth.FoundationJwtLoginModule" flag="sufficient" module="com.totvs.foundation.auth">
|
|||
|
|
<module-option name="password-stacking" value="useFirstPass"/>
|
|||
|
|
<module-option name="principalClass" value="com.totvs.technology.foundation.common.TOTVSTechPrincipal"/>
|
|||
|
|
</login-module>
|
|||
|
|
<login-module code="com.totvs.foundation.auth.FoundationExtLdapLoginModule" flag="sufficient" module="com.totvs.foundation.auth">
|
|||
|
|
<module-option name="java.naming.factory.initial" value="com.sun.jndi.ldap.LdapCtxFactory"/>
|
|||
|
|
<module-option name="java.naming.provider.url" value="ldap://<SERVIDOR>:<PORTA>/"/>
|
|||
|
|
<module-option name="java.naming.security.authentication" value="simple"/>
|
|||
|
|
<module-option name="java.naming.security.protocol" value=""/>
|
|||
|
|
<module-option name="java.naming.security.principal" value="<USUARIO>@<DOMINIO>"/> <!-- Exemplo: value="ldapportal@sp01.local" -->
|
|||
|
|
<module-option name="bindCredential" value="<SENHA_ENCRIPTADA>" />
|
|||
|
|
<module-option name="uidAttributeID" value="sAMAccountName"/>
|
|||
|
|
<module-option name="baseFilter" value="(sAMAccountName={0})"/>
|
|||
|
|
<module-option name="loginCombinedWithDatabase" value="false"/>
|
|||
|
|
<module-option name="baseCtxDN" value="DC=<ESTRUTURA>"/>
|
|||
|
|
<module-option name="rolesCtxDN" value="DC=<ESTRUTURA>"/>
|
|||
|
|
<module-option name="hashAlgorithm" value="MD5"/>
|
|||
|
|
<module-option name="hashEncoding" value="HEX"/>
|
|||
|
|
<module-option name="principalClass" value="com.totvs.technology.foundation.common.TOTVSTechPrincipal"/>
|
|||
|
|
</login-module>
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Importante!
|
|||
|
|
|
|||
|
|
O TOTVS Fluig precisa estar atualizado com os pacotes [1.8.1-230718](https://tdn.totvs.com/x/VohjLQ), [1.8.0-230718](https://tdn.totvs.com/x/3QR2KQ) ou superior para o funcionamento da senha criptografada.
|
|||
|
|
|
|||
|
|
**Utilização do LDAPS**
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
Se for utilizado o LDAPS – que é uma extensão do protocolo LDAP – é necessário ajustar os parâmetros **java.naming.provider.url** para **ldaps** com a porta **SSL** e o **java.naming.security.protocol** para o valor **ssl**, conforme o exemplo abaixo:
|
|||
|
|
|
|||
|
|
**standalone.xml**
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
<login-module code="com.totvs.foundation.auth.FoundationJwtLoginModule" flag="sufficient" module="com.totvs.foundation.auth">
|
|||
|
|
<module-option name="password-stacking" value="useFirstPass"/>
|
|||
|
|
<module-option name="principalClass" value="com.totvs.technology.foundation.common.TOTVSTechPrincipal"/>
|
|||
|
|
</login-module>
|
|||
|
|
<login-module code="com.totvs.foundation.auth.FoundationExtLdapLoginModule" flag="sufficient" module="com.totvs.foundation.auth">
|
|||
|
|
<module-option name="java.naming.factory.initial" value="com.sun.jndi.ldap.LdapCtxFactory"/>
|
|||
|
|
<module-option name="java.naming.provider.url" value="ldaps://<SERVIDOR>:<PORTA SSL>/"/>
|
|||
|
|
<module-option name="java.naming.security.authentication" value="simple"/>
|
|||
|
|
<module-option name="java.naming.security.protocol" value="ssl"/>
|
|||
|
|
<module-option name="java.naming.security.principal" value="<USUARIO>@<DOMINIO>"/> <!-- Exemplo: value="ldapportal@sp01.local" -->
|
|||
|
|
<module-option name="bindCredential" value="<SENHA_ENCRIPTADA>" />
|
|||
|
|
<module-option name="uidAttributeID" value="sAMAccountName"/>
|
|||
|
|
<module-option name="baseFilter" value="(sAMAccountName={0})"/>
|
|||
|
|
<module-option name="loginCombinedWithDatabase" value="false"/>
|
|||
|
|
<module-option name="baseCtxDN" value="DC=<ESTRUTURA>"/>
|
|||
|
|
<module-option name="rolesCtxDN" value="DC=<ESTRUTURA>"/>
|
|||
|
|
<module-option name="hashAlgorithm" value="MD5"/>
|
|||
|
|
<module-option name="hashEncoding" value="HEX"/>
|
|||
|
|
<module-option name="principalClass" value="com.totvs.technology.foundation.common.TOTVSTechPrincipal"/>
|
|||
|
|
</login-module>
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Importante!
|
|||
|
|
|
|||
|
|
Pode ser que seja necessário importar o certificado utilizado no LDAPS para o Cacerts.
|
|||
|
|
|
|||
|
|
**Encriptação da senha LDAP**
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
Nessa etapa, a senha LDAP é encriptada usando o método principal da classe **SecureIdentityLoginModule**, passando como parâmetro a senha em texto plano do LDAP utilizado. Para fazer a configuração, siga os passos abaixo:
|
|||
|
|
|
|||
|
|
- Navegue até a pasta raiz de instalação, e acesse a pasta **appserver.**
|
|||
|
|
|
|||
|
|
**Linux** ==> /opt/fluig/appserver
|
|||
|
|
|
|||
|
|
**Windows** ==> c:\fluig\appserver
|
|||
|
|
|
|||
|
|
- Gere a senha encriptada.
|
|||
|
|
|
|||
|
|
**Linux**
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
../jdk-64/bin/java -cp modules/system/layers/base/org/jboss/logging/main/jboss-logging-3.3.0.Final.jar:modules/system/layers/base/org/picketbox/main/picketbox-5.0.3.Final.jar org.picketbox.datasource.security.SecureIdentityLoginModule senha#do#LDAP@123!
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**Windows**
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
java -cp modules/system/layers/base/org/picketbox/main/picketbox-5.0.3.Final.jar org.picketbox.datasource.security.SecureIdentityLoginModule senha#do#LDAP@123!
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Importante!
|
|||
|
|
|
|||
|
|
Neste caso, **senha#do#LDAP@123!** será a senha de acesso ao LDAP e o resultado será:
|
|||
|
|
|
|||
|
|
**Encoded password: -73d03118655333edd11db66184fee4f35a6d08d87b9a0393**
|
|||
|
|
|
|||
|
|
- Caso seja utilizado o LDAP com necessidade de credencial, deve-se possuir as credenciais de um usuário válido e com permissão de consulta no diretório LDAP (Active Directory).
|
|||
|
|
|
|||
|
|
- Os dados de acesso devem ser informados nas propriedades **java.naming,security.principal** (*login*) e **java.naming,security.credentials** (senha), após substituir pelo trecho abaixo.
|
|||
|
|
|
|||
|
|
**standalone.xml**
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
<login-module code="com.totvs.foundation.auth.FoundationJwtLoginModule" flag="sufficient" module="com.totvs.foundation.auth">
|
|||
|
|
<module-option name="password-stacking" value="useFirstPass"/>
|
|||
|
|
<module-option name="principalClass" value="com.totvs.technology.foundation.common.TOTVSTechPrincipal"/>
|
|||
|
|
</login-module>
|
|||
|
|
<login-module code="com.totvs.foundation.auth.FoundationExtLdapLoginModule" flag="sufficient" module="com.totvs.foundation.auth">
|
|||
|
|
<module-option name="java.naming.factory.initial" value="com.sun.jndi.ldap.LdapCtxFactory"/>
|
|||
|
|
<module-option name="java.naming.provider.url" value="ldap://<SERVIDOR>:<PORTA>/"/>
|
|||
|
|
<module-option name="java.naming.security.authentication" value="simple"/>
|
|||
|
|
<module-option name="java.naming.security.protocol" value=""/>
|
|||
|
|
<module-option name="java.naming.security.principal" value="<USUARIO>@<DOMINIO>"/> <!-- Exemplo: value="ldapportal@sp01.local" -->
|
|||
|
|
<module-option name="java.naming.security.credentials" value="<SENHA>"/>
|
|||
|
|
<module-option name="uidAttributeID" value="sAMAccountName"/>
|
|||
|
|
<module-option name="baseFilter" value="(sAMAccountName={0})"/>
|
|||
|
|
<module-option name="loginCombinedWithDatabase" value="false"/>
|
|||
|
|
<module-option name="baseCtxDN" value="DC=<ESTRUTURA>"/>
|
|||
|
|
<module-option name="rolesCtxDN" value="DC=<ESTRUTURA>"/>
|
|||
|
|
<module-option name="hashAlgorithm" value="MD5"/>
|
|||
|
|
<module-option name="hashEncoding" value="HEX"/>
|
|||
|
|
<module-option name="principalClass" value="com.totvs.technology.foundation.common.TOTVSTechPrincipal"/>
|
|||
|
|
</login-module>
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
- Caso seja utilizado a forma de validação direta, sem necessidade credencial, substitua pelo trecho abaixo:
|
|||
|
|
|
|||
|
|
**standalone.xml**
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
<login-module code="com.totvs.foundation.auth.FoundationJwtLoginModule" flag="sufficient" module="com.totvs.foundation.auth">
|
|||
|
|
<module-option name="password-stacking" value="useFirstPass"/>
|
|||
|
|
<module-option name="principalClass" value="com.totvs.technology.foundation.common.TOTVSTechPrincipal"/>
|
|||
|
|
</login-module>
|
|||
|
|
<login-module code="com.totvs.foundation.auth.FoundationLdapLoginModule" flag="sufficient" module="com.totvs.foundation.auth">
|
|||
|
|
<module-option name="java.naming.factory.initial" value="com.sun.jndi.ldap.LdapCtxFactory"/>
|
|||
|
|
<module-option name="java.naming.provider.url" value="ldap://<SERVIDOR>:<PORTA>/"/>
|
|||
|
|
<module-option name="java.naming.security.authentication" value="simple"/>
|
|||
|
|
<module-option name="java.naming.security.protocol" value=""/>
|
|||
|
|
<module-option name="uidAttributeID" value="sAMAccountName"/>
|
|||
|
|
<module-option name="principalDNSuffix" value="@<DOMINIO>"/>
|
|||
|
|
<module-option name="rolesCtxDN" value="DC=<ESTRUTURA>"/>
|
|||
|
|
<module-option name="loginCombinedWithDatabase" value="false"/>
|
|||
|
|
<module-option name="hashAlgorithm" value="MD5"/>
|
|||
|
|
<module-option name="hashEncoding" value="HEX"/>
|
|||
|
|
<module-option name="principalClass" value="com.totvs.technology.foundation.common.TOTVSTechPrincipal"/>
|
|||
|
|
</login-module>
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Dica!
|
|||
|
|
|
|||
|
|
Caso opte por utilizar o login combinado, ou seja, deseja permitir tanto o acesso através do login/senha do Active Directory quanto da plataforma, **altere o valor da propriedade** ***loginCombinedWithDatabase para "true"**.* Assim o usuário poderá utilizar ambos os tipos de credenciais para autenticar-se na plataforma.
|
|||
|
|
|
|||
|
|
## Autenticação do usuário wcmadmin após a configuração de autenticação LDAP
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
No arquivo **standalone****.xml**, quando configurada a autenticação via LDAP é informado o parâmetro:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
<module-option name="loginCombinedWithDatabase" value="false"/>
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Quando definido como *false*, este parâmetro indica que o login funciona apenas com a senha do *Active Directory* e não funcionará com a senha que há na base. Como o **wcmadmin** é um usuário apenas da plataforma, ele não existe no AD.
|
|||
|
|
|
|||
|
|
Há duas formas para corrigir a situação:
|
|||
|
|
|
|||
|
|
**01**. Criar um usuário com o campo login do AD igual a 'wcmadmin' e senha de sua preferência, assim a plataforma irá logar o usuário wcmadmin igual aos demais usuários, através do AD.
|
|||
|
|
|
|||
|
|
**02**. Alterar o parâmetro *"loginCombinedWithDatabase"* no arquivo **standalone.xml** (que fica no diretório **<Diretório de instalação>\appserver\standalone\configuration**) para '*true*'. Com isso, a plataforma irá permitir o login tanto com a senha da base de dados quanto com a senha do AD. Nesse caso o usuário wcmadmin irá se logar com a senha da base de dados normalmente. Demais usuários que tentarem se logar com a senha da base de dados também conseguirão.
|
|||
|
|
|
|||
|
|
## Cadastro dos usuários
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
Para que o usuário consiga acessar a plataforma utilizando LDAP, seu *login* deverá ser criado na plataforma utilizando o padrão do Active Directory (AD) configurado. Por exemplo, considere o login e e-mail abaixo:
|
|||
|
|
|
|||
|
|
- ***Login***: nome.sobrenome
|
|||
|
|
|
|||
|
|
- ***E-mail***: [nome.sobrenome@suaempresa.com](mailto:nome.sobrenome@fluig.com)
|
|||
|
|
|
|||
|
|
O *login* e o *e-mail* do usuário no AD deverão ser **iguais** ao *login* e *e-mail* deste usuário cadastrados na plataforma. Não há necessidade da senha do usuário na plataforma ser igual à cadastrada no AD.
|
|||
|
|
|
|||
|
|
# Propriedades de busca LDAP
|
|||
|
|
|
|||
|
|
---
|