Utilizando o LDAP para Autenticar Usuários no Alfresco

06/09/2010 às 17:09 | por Humberto Caetano |

Existem várias formas para autenticar usuários no GED Alfresco. Podemos utilizar a base de usuários do próprio sistema, um servidor LDAP, um servidor AD, um SAMBA. A idéia final é que tenhamos uma base unica de gestão para nossos usuários.

A primeira tarefa a ser feita é editar o arquivo alfresco-global.properties.

# cd /opt/Alfresco

# vim tomcat/shared/classes/alfresco-global.properties

dir.root=/opt/Alfresco/alf_data
db.name=alfresco
db.username=alfresco
db.password=alfresco
db.host=localhost
db.port=3306
ooo.exe=/opt/broffice.org3/program/soffice
ooo.user=<%ShortInstallDir%>/alf_data/oouser
jodconverter.officeHome=/opt/broffice.org3
jodconverter.portNumbers=8101
img.root=/usr/local
swf.exe=/opt/Alfresco/bin/pdf2swf
alfresco_user_store.adminpassword=XXXXXXXXXXXXXXXXXXXXXXXXX
db.driver=org.gjt.mm.mysql.Driver
db.url=jdbc:mysql://${db.host}:${db.port}/${db.name}
authentication.chain=alfinst:alfrescoNtlm,ldap1:ldap,passthru1:passthru

 
Vejam que no nosso arquivo de configuração colocamos tres métodos de autenticação. O alfrescoNtlm, o LDAP e o passthru. Isto é feito porque o LDAP não suporta todos os tipos de autenticação disponíveis. Para autenticar usuários via CIFS (compartilhamento Windows) por exemplo, teríamos que utilizar passthru.

Agora temos que copiar alguns arquivos padrão existentes no diretório de autenticação do Alfresco. Sigam os passos:

# mkdir -p tomcat/shared/classes/alfresco/extension/subsystems/Authentication/

# mkdir -p tomcat/shared/classes/alfresco/extension/subsystems/Authentication/alfrescoNtlm

# mkdir -p tomcat/shared/classes/alfresco/extension/subsystems/Authentication/ldap

# mkdir -p tomcat/shared/classes/alfresco/extension/subsystems/Authentication/passthru

# cp -r tomcat/webapps/alfresco/WEB-INF/classes/alfresco/subsystems/Authentication/alfrescoNtlm/  tomcat/shared/classes/alfresco/extension/subsystems/Authentication/alfrescoNtlm/alfinst

# cp -r tomcat/webapps/alfresco/WEB-INF/classes/alfresco/subsystems/Authentication/passthru/  tomcat/shared/classes/alfresco/extension/subsystems/Authentication/passthru/passthru1

# cp -r tomcat/webapps/alfresco/WEB-INF/classes/alfresco/subsystems/Authentication/ldap/  tomcat/shared/classes/alfresco/extension/subsystems/Authentication/ldap/ldap1

# cp -r tomcat/webapps/alfresco/WEB-INF/classes/alfresco/subsystems/Authentication/common-ldap-context.xml tomcat/shared/classes/alfresco/extension/subsystems/Authentication/ldap/ldap1

Cada um desses diretórios é responsável por um subsistema de autenticação, e será utilizado para autenticar os usuários nos serviços Web, CIFS, FTP, etc…

Vamos começar pelo alfinst.

# vim tomcat/shared/classes/alfresco/extension/subsystems/Authentication/alfrescoNtlm/alfinst/alfresco-authentication.properties

alfresco.authentication.allowGuestLogin=false
alfresco.authentication.authenticateCIFS=false

# vim tomcat/shared/classes/alfresco/extension/subsystems/Authentication/alfrescoNtlm/alfinst/ntlm-filter.properties

ntlm.authentication.sso.enabled=false
ntlm.authentication.mapUnknownUserToGuest=false

Agora vamos ao passthru. O passthru vai enviar o pedido de login para o meu servidor SAMBA, que está autenticando usuários via LDAP. No final das contas, tudo que o Alfresco não puder autenticar com LDAP, vai ser autenticado com o SAMBA.

# vim tomcat/shared/classes/alfresco/extension/subsystems/Authentication/passthru/passthru1/passthru-authentication-context.properties

passthru.authentication.useLocalServer=false
passthru.authentication.domain=ALLIANCE3
passthru.authentication.servers=172.16.254.252
passthru.authentication.guestAccess=false
passthru.authentication.defaultAdministratorUserNames=root
passthru.authentication.connectTimeout=5000
passthru.authentication.offlineCheckInterval=300
passthru.authentication.protocolOrder=NetBIOS,TCPIP
passthru.authentication.authenticateCIFS=true
passthru.authentication.authenticateFTP=true

# vim tomcat/shared/classes/alfresco/extension/subsystems/Authentication/passthru/passthru1/ntlm-filter.properties

ntlm.authentication.sso.enabled=true
ntlm.authentication.mapUnknownUserToGuest=false

Finalmente vamos ao que viemos, a autenticação LDAP. Até o momento preparamos as autenticações que o Alfresco não tem suporte utilizando LDAP.

# vim tomcat/shared/classes/alfresco/extension/subsystems/Authentication/ldap/ldap1/ldap-authentication.properties

ldap.authentication.active=true
ldap.authentication.allowGuestLogin=true
ldap.authentication.userNameFormat=
ldap.authentication.java.naming.factory.initial=com.sun.jndi.ldap.LdapCtxFactory
ldap.authentication.java.naming.provider.url=ldap://127.0.0.1:389
ldap.authentication.java.naming.security.authentication=simple
ldap.authentication.escapeCommasInBind=false
ldap.authentication.escapeCommasInUid=false
ldap.authentication.defaultAdministratorUserNames=
ldap.synchronization.active=true
ldap.synchronization.java.naming.security.principal=cn\=root,dc\=alliance3,dc\=net
ldap.synchronization.java.naming.security.credentials=alliance
ldap.synchronization.queryBatchSize=0
ldap.synchronization.attributeBatchSize=0
ldap.synchronization.groupQuery=(objectclass\=groupOfNames)
ldap.synchronization.groupDifferentialQuery=(&(objectclass\=groupOfNames)(!(modifyTimestamp<\={0})))
ldap.synchronization.personQuery=(objectclass\=inetOrgPerson)
ldap.synchronization.personDifferentialQuery=(&(objectclass\=inetOrgPerson)(!(modifyTimestamp<\={0})))
ldap.synchronization.groupSearchBase=ou\=Groups,dc\=alliance3,dc\=net
ldap.synchronization.userSearchBase=ou\=Users,dc\=alliance3,dc\=net
ldap.synchronization.modifyTimestampAttributeName=modifyTimestamp
ldap.synchronization.timestampFormat=yyyyMMddHHmmss’Z’
ldap.synchronization.userIdAttributeName=uid
ldap.synchronization.userFirstNameAttributeName=givenName
ldap.synchronization.userLastNameAttributeName=sn
ldap.synchronization.userEmailAttributeName=mail
ldap.synchronization.userOrganizationalIdAttributeName=o
ldap.synchronization.defaultHomeFolderProvider=userHomesHomeFolderProvider
ldap.synchronization.groupIdAttributeName=cn
ldap.synchronization.groupDisplayNameAttributeName=description
ldap.synchronization.groupType=groupOfNames
ldap.synchronization.personType=inetOrgPerson
ldap.synchronization.groupMemberAttributeName=member
ldap.synchronization.enableProgressEstimation=true

Com isso, só precisamos reiniciar o serviço Alfresco para que possamos utilizar nossos usuários LDAP no acesso do sistema de gestão de documentos.

Bom proveito, até mais.