Ocomon e autenticação com o Active directory

29

Filed Under (software livre) by rafaelgomes on 05-11-2008

Ocomon, para quem não conhece é um sistema de helpdesk feito na linguagem PHP.

O Ocomon surgiu em Março de 2002 como projeto pessoal do programador Franque Custódio, tendo como características iniciais o cadastro, acompanhamento, controle e consulta de ocorrências de suporte e tendo como primeiro usuário o Centro Universitário La Salle (UNILASALLE) que adotou a ferramenta e desde então tem realizado sua manutenção interna pelo seu próprio setor de Helpdesk.

Update : A Unilasalle Canoas/RS é o principal responsável pelo desenvolvimento do Ocomon.

Com a implantação desse sistema é possível ter acesso à seguintes informações:

  • volume de chamados por período;
  • tempo médio de resposta e solução para os chamados;
  • percentual de chamados atendidos e resolvidos dentro do SLA;
  • tempo dos chamados decomposto em cada status de atendimento;
  • usuários mais ativos;
  • principais problemas;
  • reincidência de chamados por equipamento;

Uma ferramenta de código aberto, que pode ser manipulada “ao gosto do freguês”, algo necessário para esse tipo de demanda, já que geralemente é necessário a adequação à necessidade do cliente.

Achou interessante? Faça um teste no demo online.

Estava implementando a ferramenta e me deparei com alguns problemas; base de usuário e autenticação.

A empresa cliente tem um servidor Windows 2003 e usa o serviço Active Directory como base para autenticação de seus usuários.

Se o Ocomon usasse o Active Directory para manter seu banco de usuário, seria perfeito, mas por enquanto esse recurso não foi implementado. Sendo assim, seria necessário migrar os usuários do AD para a base Mysql e ao menos possibilitar a autenticação centralizada no Active Directory, mas ambos procedimentos não são suportados nativamente no Ocomon, dessa forma resolvi colocar a mão na massa e tentar fazer isso da forma mais interessante possível.

Escrevi um script que ler um arquivo cvs gerado no Active Directory (manualmente) com os dados id de usuário, nome completo e e-mail (Exatamente nessa ordem) e cria um grande arquivo SQL com todos os inserts necessários para popular o banco do ocomon com os usuários do Active Directory.

Problema 1 parcialmente resolvido. Os usuários eram idênticos nas bases, agora vinha a parte que parecia mais difícil, fazer com que o Ocomon autenticasse os usuários no Active Directory, para assim manter uma única senha para o usuário.

Foi dessa forma que descobri novamente o  poder da comunidade, o meu novo amigo José Anderson Sobrinho, que trabalha na Loga, me ajudou passando seu tutorial de como fazer isso com algumas modificações simples no arquivo login.php.

Vamos ao tutorial,

No arquivo includes/common/login.php escreva as seguites linhas:

Abaixo da linha $conec->conecta(‘MYSQL’); adicione a seguinte função: (Mude as opções em vermelho para suas necessidades).

function loginLdap($login,$senha){
$login = $login.”@dominio.com.br“;
if ($connect = @ldap_connect(“dominio.com.br“))
{
if ($bind = @ldap_bind($connect,$login,$senha))
{
@ldap_close($connect);
return true;
}
}
@ldap_close($connect);
return false;
}

Agora comente a linha:

((senha_ldap($_POST['login'],$_POST['password'],’usuarios’)==”ok”) && ($conec->userLDAP($_POST['login'],$_POST['password']) || $conecSec->userLDAP($_POST['login'],$_POST['password'])))

E coloque a seguinte linha:

if (loginLdap($_POST['login'],$_POST['password']))

Não esqueça de acessa o arquivo includes/config.php.inc e comente a linha:

define ( “AUTH_TYPE” , “SYSTEM”); //DEFAULT

E descomente a linha:

define ( “AUTH_TYPE”, “LDAP”); // ALTERNATIVE

Pronto!

Pode logar no seu ocomon sem problemas.

Essa solução foi testada no Ocomon 1.4 Patched e 2.0 (beta).

Agora so falta eu criar uma interface bonitinha para buscar as informações e migração direto no AD, sem uma intervenção manual e criar um script para rodar todo dia para que seja migrado os novos usuários, assim não será necessário ficar criando usuários em duas bases distintas.

Isso fica para um próximo post.

Quer ajudar você também? Entre no fórum e ajude. Acabei abrir um tópico para essa demanda.

Até mais…

Share and Enjoy:
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • email
  • Identi.ca
  • LinkedIn
  • RSS
  • Slashdot

Comments posted (29)

o link pra UNILASALLE está quebrado, falta o http:// na URL. :-)

Muito bom!

Sou o Alex do Fórum do Ocomon e também faço parte da do desenvolvimento do Ocomon. Só queria reforçar que o Ocomon é desenvolvido pelo pessoa do Unilasalle Canoas/RS.

Parabéns pela iniciativa da documentação. :)

Alex e Terceiro,

Obrigado pela informação, ambas informações foram ajustadas.

[...] de configurar meu Ocomon bonitinho, e colocá-lo para autenticar no Active Directory, veja aqui como fazer isso você também, eu tive um problema com o horário exibido no [...]

[...] por Rafael Gomes (rafaelgomesΘprojetofedora·org) – referência [...]

Já trabalhei com o Ocomon, mas depois que conhecei o GLPI acho que não volto mais a utilizá-lo. Além de que, posso utilizar junto com o OCS.

Abraços.

Julio,

Muito legal que temos opções, mas optei pelo Ocomon por ser um projeto nacional, ou que ao menos é “tocado” por brasileiros agora. A sua interface é fácil e para minha demanda ele se encaixa perfeitamente.

Você não é a primeira pessoa a falar bem do GLPI, mas achei um pouco confuso. Talvez seja preguiça, mas vou testa-lo depois!

Obrigado,

Rafael.

Como ficou então este seu projeto?

Depois que eu realizar os passos acima, tá resolvido ou ainda resta algum procedimento manual? Ficou meio no ar…

Os usuários criados no AD depois disto se autenticarão no OCOMON?

Um grande abraço!

Como sempre, o trabalho me impulsionou para um outro caminho. Implantei o Ocomon e nem tive tempo para treinar o pessoal direito, quanto mais criar essa interface que pensei.
Pelo que ví é bem fácil, pois no fórum que anexei o link no fim do texto, um amigo colocou o código em vbs para fazer a parte suja da coisa. So resta uma interfaca bonita! :D

Quanto a sua outra pergunta. Sim, Após fazer isso, ele irá autenticar direto no AD, mas lembre que o usuário deve estar criado também no Ocomon. Com o mesmo nome.

TU conseguiu me deixar com a mesma dúvida!!!

rsrsrsrrsrsrsr

FELIZ NATAL!!

Hernan,

Veja que respondi sim! :D

O único procedimento manual necessário é a criação dos usuários que estão no AD dentro do Ocomon. Pode ser feito manualmente, ou com um script em shell para imputar os usuário na base MySQL a partir de uma lista criado no AD.

A interface que eu queria fazer era essa, mas infelizmente não deu ainda!

Muito bom essa documentação.

Obrigado Evandro. Fico contente que tenha gostado.

Olá a todos,

já a uma outra forma de se fazer isso?

estou tendo problemas para fazer essa autenticação no Active Directory. Alguém poderia me orientar melhor? Meu email alexjacobpimentel@gmail.com

queria saber como fazer isso?

Olá Rafael!
Estou tentando integrar o Ocomon como os usuários já existentes no meu AD, li seu artigo onde você ensina a fazer essa integração. Após ler, não cheguei implementar ainda, mas uma duvida me surgiu… Ele verifica todos os dias os usuários que estão no AD? Pois caso um usuário mude sua senha o Ocomon tentara usar a antiga e acusara erro.

Não se preocupe com a replicação de senha, pois o ocomon não mais irá utilizar sua base local para verificar senha. Isso será feito diretamente no AD. A necessidade de replicar usuários é pq o Ocomon precisa deles para verificar questões de controle de acesso e afins… Assim eles precisam ser criados no banco Mysql do Ocomon.

Muito obrigado Rafael! e mais uma vez, parabéns pelo tutorial!

Rafael,

Tenho um AD em um servidor windows 2008 e nao deu certo. Vc j’a tenho esta integracao emm algum server 2008?

Olá Rafael..

Queria tirar uma dúvida.. vc menciona um script para “igualar” a base de dados do ocomon e do AD.. vc teria como me passar esse script e o processo para eu conseguir fazer a mesma coisa???

Abraços

Cleide,

Não fiz o script para a automatizar esse processo. Pelo visto não é algo difícil, porém não posso fazê-lo agora.

Se alguém por favor tiver o script, podem informar em comentário, que eu anexo no texto.

Marco,

Infelizmente não testei com o 2008! Sendo assim reporte os erros no fórum do Ocomon para ver se existe alguma novidade nesse assunto, mas não esqueça de comentar o sucesso dessa missão aqui, ok?

Obrigado,

// No LOGON DO OCOMON, ao autenticar no Active Directory, se for um novo usuário do OCOMON, automaticamente é pesquisado o DISPLAY NAME e EMAIL no AD e CRIADO O NOVO USUARIO DO OCOMON.

define (‘DOMINIO’,'meudominio.com.br’);

// —————————————
function loginLdap($username,$senha){
// —————————————
$login = “${username}@”.DOMINIO;
$retorno = false;
if ($connect = @ldap_connect(LDAP_HOST)) {
if ($bind = @ldap_bind($connect,$login,$senha)) {
if (!existeUsuarioDB($username)) {
$DisplayName = $Email = “”;
list($DisplayName,$Email) = explode(‘||’,devolveNomeEmailLDAP($username,$senha));
if (!$DisplayName) $DisplayName = $username;
if (!$Email) $Email = $login;
salvaUsuarioDB($username,$DisplayName,$Email);
}
$retorno = true;
}
@ldap_close($connect);
}
return $retorno;
}

// —————————————
function devolveNomeEmailLDAP($username,$senha) {
// —————————————
$login = “${username}@”.DOMINIO;
if ($ldapconn = ldap_connect(LDAP_HOST)) {
if ($bind = ldap_bind($ldapconn,$login,$senha)) {
$SEARCH = ldap_search($ldapconn, LDAP_DOMAIN, “(&(objectClass=user)(sAMAccountName={$username}))”);
$TOTAL = ldap_count_entries ($ldapconn,$SEARCH);
$infoLDAP = ldap_get_entries($ldapconn ,$SEARCH);
@ldap_close($ldapconn);
return utf8_decode(trim($infoLDAP[0]["cn"][0])) . ‘||’ . trim($infoLDAP[0]["mail"][0]);
}
}
@ldap_close($connect);
return false;
}

function existeUsuarioDB($username) {
$query = “select * from usuarios where login = ‘$username’”;
$resultado = mysql_query($query) or die(mysql_error());
return(mysql_numrows($resultado) !== 0);
}

function salvaUsuarioDB($username,$displayname,$email) {
global $rowconfig, $QRY;
$qryconfig = $QRY["useropencall"];
$execconfig = mysql_query($qryconfig);
$rowconfig = mysql_fetch_array($execconfig);
$data = date(“Y-m-d H:i:s”);
$query = “INSERT INTO usuarios (user_id,login,nome,password,data_inc,data_admis,email,fone,nivel,AREA, user_admin) “.
“values (”,’$username’,'$displayname’,'t3mp0r@r!0′,’$data’,'$data’,'$email’,null,3,${rowconfig['conf_ownarea']}, 0) “;
$resultado = mysql_query($query) or die(mysql_error());
}

Fiz toda a configuraçã de autenticação com o AD, só não entendi onde eu inclue este script de sincronização de logon do AD com o OCOMON.

Hudson, parabéns!
Seu código funcionou bacana.

Agora vou começar a trabalhar em um script para manter o banco mysql sempre atualizado em caso de alterações no AD.

Hudson,
Este scrcipt seria o que faz um “merge” da base MySQL do Ocomon e dos usuários do AD? Não entendi exatamente. Outra pergunta: Ele deve ser inserido em qual arquivo em qual linha?

Obrigado pela ajuda,

Gente, desculpa a ignorância, mas meu servidor de hospedagem é windows. Como faço pra ter este script pra ele ?

O tópico tá fantastico!

Marcelo,

O script deve ser portado para vb ou outra linguagem com interpretador ou compilador disponível no Windows. Acho que Shell script não é uma opção.

Amigos, gostaria de um tutorial para istalar o ocomon no server 2003, algum de vcs teria, se tiver por favor me envie no e-mail: diogo@smartti.org

Write a comment