JoaoVM Posted May 13, 2013 at 10:23 AM Report #507078 Posted May 13, 2013 at 10:23 AM Boas, Tenho uma duvida sobre como fazer login e ir buscar a password do windows, ou seja, quero fazer com que os utilizadores não tenham que ter que ter duas passwords, por exemplo, ter a password do windows e quando fizer o login da aplicação, fazer uma comparação do tipo, se PWRD_INSERIDA = PWRD_WIN => LOGIN_EFETUADO. Outra dúvida é se só posso fazer isto através de LDAP ou dá para fazer sem isto? Cumprimentos
HappyHippyHippo Posted May 13, 2013 at 10:27 AM Report #507082 Posted May 13, 2013 at 10:27 AM Outra dúvida é se só posso fazer isto através de LDAP ou dá para fazer sem isto? existem muito fracas soluções de .Net/PHP para se poder fazer isso de outra forma terás mesmo de fazer por LDAP IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
JoaoVM Posted May 13, 2013 at 10:29 AM Author Report #507083 Posted May 13, 2013 at 10:29 AM Estive a ver OpenLDAP..aconselhas?
HappyHippyHippo Posted May 13, 2013 at 10:30 AM Report #507084 Posted May 13, 2013 at 10:30 AM nunca necessitei de usar LDAP, terás de esperar por alguém que já usou IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
JoaoVM Posted May 13, 2013 at 10:31 AM Author Report #507085 Posted May 13, 2013 at 10:31 AM Ok, vou estudar e testar e se tiver dúvidas coloco aqui no fórum...obrigado 😉
brunoais Posted May 14, 2013 at 08:13 AM Report #507225 Posted May 14, 2013 at 08:13 AM O php funciona no servidor. O cliente está no seu computador. Como esperas misturar os 2? "[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31 Life is a genetically transmitted disease, induced by sex, with death rate of 100%.
JoaoVM Posted May 14, 2013 at 08:22 AM Author Report #507227 Posted May 14, 2013 at 08:22 AM é assim o objetivo final não é ficar tudo no mesmo computador, o objetivo para agora é fazer uma simulação do servidor e meter a funcionar o sistema de autenticação por ldap. Tens ideias que possas partilhar comigo? tenho um exemplo que utiliza o http://adldap.sourceforge.net/, mas ainda não coloquei a funcionar. se tiveres ideias ou algum conselho ou outra coisa que me possas ajudar agradecia. Obrigado
brunoais Posted May 14, 2013 at 08:37 AM Report #507232 Posted May 14, 2013 at 08:37 AM O phpBB tem um que funciona bem. Podes dar uma vista de olhos como ele faz. "[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31 Life is a genetically transmitted disease, induced by sex, with death rate of 100%.
JoaoVM Posted May 14, 2013 at 08:44 AM Author Report #507234 Posted May 14, 2013 at 08:44 AM hum..obrigado, vou experimentar 😉 só uma coisa mais, este site não é para colocar online, é para ficar simplesmente através da rede da empresa e trabalhar a partir da mesma..eles trabalham com o WAMP nas suas aplicações já desenvolvidas, tem algum contra efeito?
brunoais Posted May 14, 2013 at 08:48 AM Report #507239 Posted May 14, 2013 at 08:48 AM Não. Mas as regras do que mencionei mantém-se. "[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31 Life is a genetically transmitted disease, induced by sex, with death rate of 100%.
JoaoVM Posted May 14, 2013 at 08:49 AM Author Report #507240 Posted May 14, 2013 at 08:49 AM ok, quando testar aviso como correu. obrigado
JoaoVM Posted May 15, 2013 at 03:12 PM Author Report #507512 Posted May 15, 2013 at 03:12 PM (edited) Utilizei adLdap e coloquei tudo a funcionar e rola bem, acabei por não colocar um a fazer de servidor e cliente no mesmo pc, mas rola no servidor da empresa que é o que interessa 😉 Obrigado Edited May 15, 2013 at 03:12 PM by JoaoVM
taviroquai Posted May 15, 2013 at 11:33 PM Report #507567 Posted May 15, 2013 at 11:33 PM (edited) Eu uso PHP + LDAP para autenticar utilizadores em servidores WS2003/8 e funciona muito bem. Basta instalares a extensão LDAP no PHP. Acho que já tinha apresentado algo sobre isso aqui no forum mas já não me lembro... se encontrar coloco aqui. Encontrei uma classe que tinha feito para isso... é um pouco grande... Este editor é uma pain... copiei do netbeans ficou assim... 😕 Basicamente precisas dizer em que OU queres procurar. Pergunta ao teu sysadmin como está organizada a OU dos users. <?php class Ldap { private $conn; private $server = ''; private $base = ''; public $log = array(); public function __construct($server) { $this->server = $server; } /** * Define an OU base * @param string $ou */ public function setBase($ou) { $this->log[] = "Definida base ou = ".$ou; $this->base = $ou; } /** * * @param string $server * @return boolean */ public function connect() { $this->conn = @ldap_connect( $this->server ); if ($this->conn) $this->log[] = "Ready to connect to ".$this->server; return $this->conn; } /** * End ldap connection * @return boolean */ public function disconnect() { $this->log[] = "Disconnected from server."; return ldap_close($this->conn); } /** * * @param string $username * @param string $password * @param resource $conn * @return boolean */ public function auth( $username, $password, $prefix = "" ){ $username = $prefix.$username; if (empty($username) || empty($password)) $anonymn = 'anonymn'; else $anonymn = ''; if ( @ldap_bind( $this->conn, utf8_encode($username), $password ) ) { //ldap_unbind( $conn ); $this->log[] = "$anonymn auth succeded."; return true; } else { $this->log[] = "Auth failed."; return false; } } /** * Filter example by login that starts with 'ma': (sAMAccountName=ma*) * LDAP: http://www.kouti.com/tables/userattributes.htm * * @param string $filter * @param resource $conn * @param string $ou * @return array */ public function find($filter, $ou = "ou=PRES", $filter2 = array()) { $ou .= $this->base; $result = @ldap_search($this->conn, $ou, $filter, $filter2); if ($result) { // get entry data as array $data = ldap_get_entries($this->conn, $result); $this->log[] = "Search returned ".count($data)." results"; return $data; } else { return array(); } } /** * Returns OUs list found by filter * @param string $filter1 * @param string $ou * @param string $filter2 * @return array */ public function findAll($filter1, $ou = "ou=PRES", $filter2 = array("ou")) { $ou .= $this->base; $result = @ldap_list($this->conn, $ou, $filter1, $filter2); if ($result) { // get entry data as array $data = ldap_get_entries($this->conn, $result); $this->log[] = "List returned ".count($data)." results"; foreach ($data as $item) { if (count($filter2) > 1) { $array = array(); foreach ($filter2 as $attr) { if (!empty($item[$attr][0])) $array[$attr] = $item[$attr][0]; } } else { foreach ($filter2 as $attr) { if (!empty($item[$attr][0])) $array = $item[$attr][0]; } } $list[] = $array; //$list[] = $item; } array_shift($list); return $list; } else { return array(); } } /** * Returns a list of SAMs found by filter * @param string $filter * @param string $ou * @param string $filter2 * @return array */ public function findSAMs($filter, $ou = "ou=PRES", $filter2 = array("sAMAccountName", "cn")) { $ou .= $this->base; $list = array(); $result = @ldap_search($this->conn, $ou, "sAMAccountName=".$filter, $filter2); if ($result) { // get entry data as array $data = ldap_get_entries($this->conn, $result); $this->log[] = "The search for SAMs by samaccountname returned ".count($data)." results"; foreach ($data as $item) { if (!is_null($item['samaccountname'][0])) $list[] = $item['samaccountname'][0]; } } $result = @ldap_search($this->conn, $ou, "cn=".$filter, $filter2); if ($result) { // get entry data as array $data = ldap_get_entries($this->conn, $result); $this->log[] = "The search for SAMs by cn returned ".count($data)." results"; foreach ($data as $item) { if (!is_null($item['cn'][0])) $list[] = utf8_encode ($item['cn'][0]); } } return $list; } /** * Returns a list of users childs of (departament, division, service) * @param string $departamento * @param string $divisao * @param string $servico * @param string $ou * @return array */ public function users($q = "*", $departamento = NULL, $divisao = NULL, $servico = NULL, $ou = 'ou=PRES') { if (isset($servico)) return $this->findSAMs($q, "ou=$servico,ou=$divisao,ou=$departamento,".$ou); if (isset($divisao)) return $this->findSAMs($q, "ou=$divisao,ou=$departamento,".$ou); if (isset($departamento)) return $this->findSAMs($q, "ou=$departamento,".$ou); return $this->findSAMs($q, $ou); } /** * Returns a multi array with all SAM attributes. * @param string $username * @return array */ public function userDetails($username) { return $this->find("sAMAccountName=".$username); } /** * Devolve um array multidimensional com todos os atributos da OU indicada. * @param string $ou * @return array */ public function organDetails($ou) { return $this->find("ou=".$ou); } } Edited May 15, 2013 at 11:50 PM by taviroquai
JoaoVM Posted May 16, 2013 at 09:47 AM Author Report #507594 Posted May 16, 2013 at 09:47 AM Desde já obrigado taviroquai, isto é algo parecido com o que tenho, o adLdap é bastante parecido..eles já dão tudo feito e o que tenho que fazer é adaptar ao meu código, já está a funcionar e dá muito jeito e acho bastante seguro também..como já tenho a funcionar não vou alterar agora, mas pode haver pessoal com mais dúvidas sobre este assunto e este tópico acho que é muito importante..obrigado a todos. Abraço
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now